OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

重なり z-index

  • 暇なときにでも
  • 質問No.196176
  • 閲覧数121
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 59% (194/328)

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 に文字と四角を表示しました。
表示位置を重なるようにしたら、ソースの後に書いた方の
四角が文字に隠れてしまいました。
四角を文字の上になるようにして、重なった部分の文字は
四角で消されるようにするにはどうしたらいいんですか?
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1

SetWindowText で文字を書くということは、ウィンドウの上にスタティックテキストコントロールがあるということですか?
基本的に親ウィンドウのクライアントエリアに何を書き込んでも、その上にあるコントロールに影響を与えることはできません。あくまでも「別のウィンドウ」です。

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

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

hPen = CreatePen(...
hPrevPen = SelectObject(hDC, hPen); // 以前のペンを保存
...
...
SelectObject(hDC, hPrevPen); // 以前のペンを戻す。この場合は戻り値は無視
DeleteObject(hPen);
お礼コメント
A__

お礼率 59% (194/328)

hrs = CreateWindow("STATIC", ...

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

DeleteObject(hPen);
を書き忘れていました。
どうして以前のペンを戻すのか分からなかったけど
気になったらそれはまた質問しようと思います。
hOldPen とかいうのを定義して以前のペンを戻すソースは
よく見かけています。
本当は前からすごく気になっているんだけど。
投稿日時 - 2002-01-11 20:18:05
-PR-
-PR-
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ