我在 Win32 C++ 中创建了一个透明复选框。我做到了,因为据我所知,您不能在本机 win32 中使用透明复选框,我需要在 NSIS 安装程序中使用此复选框。
我的问题:重绘时,我不知道如何擦除透明背景,以便在“透明画布”上绘图。当用户更改复选框内的文本并且我需要重新绘制它时,这一点很重要。我想我遇到了每个人都必须使用透明窗口的问题。
我可以清除透明窗口的方式是什么,注意我熟悉 WinAPI,您无法真正清除窗口 AFAIK,因为您只是在窗口上重新绘制。所以我正在寻找关于我可以使用哪些技术来重绘窗口的建议,例如:
- 向父窗口发送重绘消息,希望重绘父窗口(位于复选框下方)而不向其子窗口(即复选框)发送消息。我试过这个,它使复选框有很多闪烁。
- 也许有一个我不知道的透明画笔/绘画功能可以用来在整个复选框窗口上绘画,这基本上会清除窗口?我试过这个它使复选框窗口由于某种原因变黑?
我的代码:
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;