0

これにより、画面上のテキストが透明なBGと色付きのテキストで表示されますが、変更したい場合はどうなりますか?

後でテキスト、どうすればいいですか?使用する必要があります:SendMessage(); または:SetWindowText()はいの場合、どのように、そして

いいえ、それでは何ですか?そしてどうやって

case WM_PAINT:

       dc = BeginPaint(hwnd, &Ps);

SetBkMode(dc, TRANSPARENT);

        SetTextColor(dc, RGB(454,0,0)); 

       TextOut(dc, 10, 200, L"SEE? ", 5);

       EndPaint(hwnd, &Ps);

       break;
4

1 に答える 1

2

ウィンドウに関連付けられたテキストを描画する場合は、次のようにする必要があります。

  1. TextOutハードコードされた文字列で呼び出さないでください。代わりに、を介して取得してGetWindowTextください。
  2. メッセージにハンダーを追加しWM_SETTEXTます。それを受け取ったら、ウィンドウ(または少なくともテキストが描画されると想定される領域)を無効にします。

透明性などについて説明します。

あなたのウィンドウには関連する背景ブラシがあると思います(つまり、クラス登録時WNDCLASSにゼロ以外のメンバーがありました)。hbrBackgroundそうでない場合は、ペイントされていない領域の上に透明なテキストをペイントしています。これには、ジャンクが含まれている可能性があります。

ウィンドウプロシージャへの呼び出し中に、をBeginPaint受け取りWM_ERASEBACKGROUNDます。あなたがそれを-に渡すと仮定するとDefWindowProc、ウィンドウのクライアント領域は背景ブラシで埋められます。ペイントを開始するたびに、クライアントがウィンドウに表示されるように、ブラシで塗りつぶされます。次に、新しく塗りつぶされた背景にテキストを透過的に描画します。にじみが発生しないように。

ウィンドウの視覚的なものを変更したいときはいつでも、その場で余分なものを描くだけでは十分ではありません。なぜなら、いつでもあなたのウィンドウはOSによってそれ自身を再描画するように要求されるかもしれないからです。を受け取ったときにウィンドウが適切にペイントできるようにする必要がありますWM_PAINT

一般的な方法は、変更時にウィンドウ(またはその一部、使用中InvalidateRectまたは同様の関数)を無効にすることです。そして、受け取っWM_PAINTたら、ウィンドウを塗り直します。

于 2012-06-06T18:37:32.387 に答える