wxwidgets прозрачная клиентская область

я искал решение, но я не нашел никакого решения. В родной Win32 можно сделать клиентскую область фреймового окна прозрачной:

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. Это также делает клиентскую зону прозрачной. Но теперь форма окна не кликабельна. Я попытался поместить этот код в метод события рисования "TestFrame::OnPaint(wxPaintEvent& event)" и в метод "TestFrame::TestFrame(wxWindow* parent,wxWindowID id)".

Мне нужно только сделать заголовок интерактивным, чтобы перемещать окно.

Заранее спасибо.


person Community    schedule 07.07.2012    source источник


Ответы (2)


Вероятно, это плохая идея смешивать вызовы Windows API с кодом wxWidgets.

Вы пробовали wxWindow::SetTransparent (wxByte alpha)?

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


пытаться

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 = желтый

Возможно, проблема заключалась в том, что вы решили использовать rgb(255 255 255). Если вы используете RGB(255,255,0). Оно работает.

person wieschoo    schedule 07.07.2012