Win32 C++で透明なチェックボックスを作成しました。 NSISインストーラでこのチェックボックスを使用する必要があります。WinAPI透明ウィンドウをクリアする方法
問題:再ペイントするときに透明な背景を消去する方法がわからないので、「クリアキャンバス」を描画できます。これは、ユーザーがチェックボックス内のテキストを変更し、それを再描画する必要がある場合に重要です。誰もが透明な窓を持っていなければならない問題に遭遇したと思います。
透明ウィンドウをクリアする方法注:私はWinAPIに精通しているので、ウィンドウの上に再塗りつぶすだけで本当にウィンドウAFAIKをクリアすることはできません。
- うまくいけば、送信withut(チェックボックスの下に座っている)親を再描画します親ウィンドウに再描画メッセージを送信する:だから私は、私のようなウィンドウを再描画するために使用できる技術がどのようなアドバイスを探していますその子(つまりチェックボックス)にメッセージを送ります。私はこれを試しました、それはチェックボックスにちらつきの多くを持っています。
- 透明なブラシ/塗りつぶし機能は、私が本質的にウィンドウをクリアするチェックボックスウィンドウ全体にペイントするのに使うことができることを知っていませんか?私はこれを試したが、何らかの理由でチェックボックスのウィンドウが黒くなってしまった?
マイコード:
case WM_SET_TEXT:
{
// set checkbox text
// Technique 1: update parent window to clear this window
RECT thisRect = {thisX, thisY, thisW, thisH};
InvalidateRect(parentHwnd, &thisRect, TRUE);
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// Technique 2:
SetBkMode(hdc, TRANSPARENT);
Rectangle(hdc, thisX, thisY, thisW, thisH); // doesn't work just makes the window a big black rectangle?
EndPaint(hwnd, &ps);
}
break;
ウィンドウスタイルを削除するようにしてください。 –
WM_ERASEBKGNDメッセージハンドラでは何をしますか? –
@LarryOstermanうーん、以前はそのメッセージと一緒に働いたことはありませんか?今は何もしないで、私はどうしたらいいですか? –