どうもこんばんは
merloです(←これはHNです)
いつもお世話になっております.
皆々様のご協力により,研究用のソフトも
だいぶ完成の域に達してきました.
改めて御礼申し上げます.
完成した際には,何らかの手段で
紹介させていただこうかと思っています.
ところで,本題に入ります.
w2k MFC DLG
ピクチャボックスを設置して,TextOut SetPixel等を
実行すると,指定した座標値に意図したものが
表示されるのは,皆様も当然ご存知かと思いますが,
今回はそれに関する質問です.
例えば,TextOutにて表示するときに,
たまたまピクチャボックスの外にわずかに外れたところが
指定座標点になった場合,
ピクチャボックスの内外に関わらず,描画が行われます.
そこで,質問です.
1.ピクチャボックスの外に座標を指定した場合には,描画を実行しない.
(ただし,工夫すればすでに実現可能ですが,関数処理を希望します)
2.ピクチャボックスに描画されたものを一括消去する方法
たびたびで,申し訳ありませんが,
どうぞよろしくお願い申し上げます.
merlo
>1.ピクチャボックスの外に座標を指定した場合には,描画を実行しない.
> (ただし,工夫すればすでに実現可能ですが,関数処理を希望します)
(訂正)
1.ピクチャボックスの外にはみ出た描画内容は描画しない
(ただし,工夫すればすでに実現可能ですが,関数処理を希望します)
(つまり,テキストアウトで表示した文字列の最後尾がはみでたら,ちょんぎっ
て,内側にあるものだけを表示)
1.リージョンを使えばいいのではないでしょうか?
2.塗りつぶすのではダメということでしょうか?
(CDC::)IntersectClipRect()ではみ出た所をクリップ出来ます。
詳細はMSDNを参照して下さい。
中級者X 様 くたくた 様
アドバイスありがとうございます.
以下のプログラムで無事修正することができました.
ありがとうございました.
CDC* pDC=m_pict.GetDC();
CRect rect;
GetClientRect(&rect);
pDC->IntersectClipRect(&rect);
これは,余談なのですが,
もし,ピクチャボックスが複数あったら,
GetClientRect(&rect);
は,どうなるのでしょうか.
クライアント領域が複数?あるのでは・・・
どの四角形をゲットするのか,ということで
少し疑問が残ります
>もし,ピクチャボックスが複数あったら,GetClientRect(&rect);
>は,どうなるのでしょうか.
実験してみて下さい。5~10分以内で結論が出ます。
爆 やってみます
この場合のGetClientRectは、
this->GetClientRectと同じですよね。
だから、複数ピクチャボックスがある場合には,
そのthisの部分を変えるだけでできるでしょう。