}
#endif
+bool wxTopLevelWindowMSW::MSWProcessMessage(WXMSG* pMsg)
+{
+ // MSW specific feature: if the dialog has only one notebook-like child
+ // window (actually it could be any window that returns true from its
+ // HasMultiplePages()), then [Shift-]Ctrl-Tab and Ctrl-PageUp/Down keys
+ // should iterate over its pages even if the focus is outside of the
+ // control because this is how the standard MSW properties dialogs behave
+ if ( pMsg->message == WM_KEYDOWN && wxIsCtrlDown() &&
+ (pMsg->wParam == VK_TAB ||
+ pMsg->wParam == VK_PRIOR ||
+ pMsg->wParam == VK_NEXT) )
+ {
+ // check if we have a unique notebook-like child
+ wxWindow *bookctrl = NULL;
+ for ( wxWindowList::const_iterator i = GetChildren().begin(),
+ end = GetChildren().end();
+ i != end;
+ ++i )
+ {
+ wxWindow * const window = *i;
+ if ( window->HasMultiplePages() )
+ {
+ if ( bookctrl )
+ {
+ // this is the second book-like control already so don't do
+ // anything as we don't know which one should have its page
+ // changed
+ bookctrl = NULL;
+ break;
+ }
+
+ bookctrl = window;
+ }
+ }
+
+ if ( bookctrl && bookctrl->wxWindowMSW::MSWProcessMessage(pMsg) )
+ return true;
+ }
+
+ return wxTopLevelWindowBase::MSWProcessMessage(pMsg);
+}
+
WXLRESULT wxTopLevelWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{
WXLRESULT rc = 0;
}
}
+// ---------------------------------------------------------------------------
+
+bool wxTopLevelWindowMSW::SetTransparent(wxByte alpha)
+{
+ typedef DWORD (WINAPI *PSETLAYEREDWINDOWATTR)(HWND, DWORD, BYTE, DWORD);
+ static PSETLAYEREDWINDOWATTR pSetLayeredWindowAttributes = NULL;
+
+ if ( pSetLayeredWindowAttributes == NULL )
+ {
+ wxDynamicLibrary dllUser32(_T("user32.dll"));
+ pSetLayeredWindowAttributes = (PSETLAYEREDWINDOWATTR)
+ dllUser32.GetSymbol(wxT("SetLayeredWindowAttributes"));
+ }
+ if ( pSetLayeredWindowAttributes == NULL )
+ return false;
+
+ LONG exstyle = GetWindowLong(GetHwnd(), GWL_EXSTYLE);
+
+ // if setting alpha to fully opaque then turn off the layered style
+ if (alpha == 255)
+ {
+ SetWindowLong(GetHwnd(), GWL_EXSTYLE, exstyle & ~WS_EX_LAYERED);
+ Refresh();
+ return true;
+ }
+
+ // Otherwise, set the layered style if needed and set the alpha value
+ if ((exstyle & WS_EX_LAYERED) == 0 )
+ SetWindowLong(GetHwnd(), GWL_EXSTYLE, exstyle | WS_EX_LAYERED);
+
+ return pSetLayeredWindowAttributes(GetHwnd(), 0, (BYTE)alpha, LWA_ALPHA) != 0;
+}
+
+bool wxTopLevelWindowMSW::CanSetTransparent()
+{
+ // The API is available on win2k and above
+
+ static int os_type = -1;
+ static int ver_major = -1;
+
+ if (os_type == -1)
+ os_type = ::wxGetOsVersion(&ver_major);
+
+ return (os_type == wxWINDOWS_NT && ver_major >= 5);
+}
+
// ----------------------------------------------------------------------------
// wxTopLevelWindow event handling
// ----------------------------------------------------------------------------