wxwidgets透明客户区

时间:2012-07-07 16:47:04

标签: c++ wxwidgets native-code alpha-transparency

我搜索了一个解决方案,但我找不到任何解决方案。在本机Win32中,可以使framedwindow的clientarea透明:

HWND hwnd = (HWND)GetHandle();
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED|WS_EX_TOOLWINDOW);
SetLayeredWindowAttributes(hwnd, RGB(255,255,255), 0, LWA_COLORKEY);
Refresh();

这也适用于wxwidgets。它使客户端也变得透明。但现在Windows窗体不可点击。 我试图将此代码放在paint-event-method“TestFrame :: OnPaint(wxPaintEvent& event)”和方法“TestFrame :: TestFrame(wxWindow * parent,wxWindowID id)”中。

我只需要点击标题栏就可以移动窗口。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

将Windows API调用与wxWidgets代码混合在一起可能是一个坏主意。

您是否尝试过wxWindow :: SetTransparent(wxByte alpha)?

http://docs.wxwidgets.org/trunk/classwx_window.html#ac8cf4398cec50ac36634760f45a0656f

答案 1 :(得分:0)

HWND hwnd = (HWND)GetHandle();
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED|WS_EX_TOOLWINDOW);
SetLayeredWindowAttributes(hwnd, RGB(255,255,0), 0, LWA_COLORKEY);

并设置backgroundcolor = yellow

也许问题是你选择使用rgb(255,255,255)。如果您使用RGB(255,255,0)。它有效。