HWND hrs;//プロト

hrs = CreateWindow( ...

というのがあって

 wsprintf(mojibuf,"色付けが実行された");
 SetWindowText(hrs,cbuf);

 hDC = BeginPaint(hWnd, &ps);
 hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));//枠色
 SelectObject(hDC, hPen);
 hBrush = CreateSolidBrush(RGB(0, 255, 0));//中色
 SelectObject(hDC, hBrush);
 Rectangle(hDC, 10, 90, 150, 100);
 DeleteObject(hBrush);
 EndPaint(hWnd, &ps);

これで、hWnd に文字と四角を表示しました。
表示位置を重なるようにしたら、ソースの後に書いた方の
四角が文字に隠れてしまいました。
四角を文字の上になるようにして、重なった部分の文字は
四角で消されるようにするにはどうしたらいいんですか?

A 回答 (1件)

SetWindowText で文字を書くということは、ウィンドウの上にスタティックテキストコントロールがあるということですか?


基本的に親ウィンドウのクライアントエリアに何を書き込んでも、その上にあるコントロールに影響を与えることはできません。あくまでも「別のウィンドウ」です。

なので、TextOut などで文字を書き込むしかありません。

それから、SelectObject した時の戻り値は保存しておいて、元に戻すようにします。

hPen = CreatePen(...
hPrevPen = SelectObject(hDC, hPen); // 以前のペンを保存
...
...
SelectObject(hDC, hPrevPen); // 以前のペンを戻す。この場合は戻り値は無視
DeleteObject(hPen);
    • good
    • 0
この回答へのお礼

hrs = CreateWindow("STATIC", ...

としていました。
hrs は「別のウィンドウ」だから、hWnd に文字を書いても
hrs と重なれば hrs の領域の方が上になるということですね。
やろうとしていたことが無理だと分かったから、
hrs に wsprintf( ) で書く方法をやめて、hWnd に TextOut( ) で
書くことにしました。
そうしら、ソースの後に書いた方が上になって表示されて
思いどうりになりました。

DeleteObject(hPen);
を書き忘れていました。
どうして以前のペンを戻すのか分からなかったけど
気になったらそれはまた質問しようと思います。
hOldPen とかいうのを定義して以前のペンを戻すソースは
よく見かけています。
本当は前からすごく気になっているんだけど。

お礼日時:2002/01/11 20:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報