X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/993da3969b28e4f80b492cc26114fb0e151163cb..c663fbea6851207b4e0ac3e362868c23b1494a46:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index a8191c4e43..ccb40f124c 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -128,7 +128,11 @@ wxMenu *wxCurrentPopupMenu = NULL; #endif // wxUSE_MENUS_NATIVE +#ifdef __WXWINCE__ +extern wxChar *wxCanvasClassName; +#else extern const wxChar *wxCanvasClassName; +#endif // true if we had already created the std colour map, used by // wxGetStdColourMap() and wxWindow::OnSysColourChanged() (FIXME-MT) @@ -180,6 +184,8 @@ static inline void wxBringWindowToTop(HWND hwnd) } } +#ifndef __WXWINCE__ + // ensure that all our parent windows have WS_EX_CONTROLPARENT style static void EnsureParentHasControlParentStyle(wxWindow *parent) { @@ -196,7 +202,6 @@ static void EnsureParentHasControlParentStyle(wxWindow *parent) but if the parent doesn't have it, it wouldn't recurse inside it later on and so wouldn't have a chance of getting back to this window neither. */ -#ifndef __WXWINCE__ while ( parent && !parent->IsTopLevel() ) { LONG exStyle = ::GetWindowLong(GetHwndOf(parent), GWL_EXSTYLE); @@ -209,9 +214,10 @@ static void EnsureParentHasControlParentStyle(wxWindow *parent) parent = parent->GetParent(); } -#endif // !__WXWINCE__ } +#endif // !__WXWINCE__ + // --------------------------------------------------------------------------- // event tables // --------------------------------------------------------------------------- @@ -280,16 +286,16 @@ wxBEGIN_FLAGS( wxWindowStyle ) wxEND_FLAGS( wxWindowStyle ) wxBEGIN_PROPERTIES_TABLE(wxWindow) - wxEVENT_PROPERTY( Close , wxEVT_CLOSE_WINDOW , wxCloseEvent) - wxEVENT_PROPERTY( Create , wxEVT_CREATE , wxWindowCreateEvent ) - wxEVENT_PROPERTY( Destroy , wxEVT_DESTROY , wxWindowDestroyEvent ) + wxEVENT_PROPERTY( Close , wxEVT_CLOSE_WINDOW , wxCloseEvent) + wxEVENT_PROPERTY( Create , wxEVT_CREATE , wxWindowCreateEvent ) + wxEVENT_PROPERTY( Destroy , wxEVT_DESTROY , wxWindowDestroyEvent ) // Always constructor Properties first - wxREADONLY_PROPERTY( Parent,wxWindow*, GetParent, , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxPROPERTY( Id,wxWindowID, SetId, GetId, -1, 0 /*flags*/ , wxT("Helpstring") , wxT("group") ) - wxPROPERTY( Position,wxPoint, SetPosition , GetPosition, wxPoint(-1,-1) , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // pos - wxPROPERTY( Size,wxSize, SetSize, GetSize, wxSize(-1,-1) , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // size - wxPROPERTY( WindowStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style + wxREADONLY_PROPERTY( Parent,wxWindow*, GetParent, EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) + wxPROPERTY( Id,wxWindowID, SetId, GetId, wxID_ANY, 0 /*flags*/ , wxT("Helpstring") , wxT("group") ) + wxPROPERTY( Position,wxPoint, SetPosition , GetPosition, wxDefaultPosition , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // pos + wxPROPERTY( Size,wxSize, SetSize, GetSize, wxDefaultSize , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // size + wxPROPERTY( WindowStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style // Then all relations of the object graph @@ -297,23 +303,23 @@ wxBEGIN_PROPERTIES_TABLE(wxWindow) // and finally all other properties - wxPROPERTY( ExtraStyle , long , SetExtraStyle , GetExtraStyle , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // extstyle - wxPROPERTY( BackgroundColour , wxColour , SetBackgroundColour , GetBackgroundColour , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // bg - wxPROPERTY( ForegroundColour , wxColour , SetForegroundColour , GetForegroundColour , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // fg - wxPROPERTY( Enabled , bool , Enable , IsEnabled , wxxVariant((bool)true) , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxPROPERTY( Shown , bool , Show , IsShown , wxxVariant((bool)true) , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) + wxPROPERTY( ExtraStyle , long , SetExtraStyle , GetExtraStyle , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // extstyle + wxPROPERTY( BackgroundColour , wxColour , SetBackgroundColour , GetBackgroundColour , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // bg + wxPROPERTY( ForegroundColour , wxColour , SetForegroundColour , GetForegroundColour , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // fg + wxPROPERTY( Enabled , bool , Enable , IsEnabled , wxxVariant((bool)true) , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) + wxPROPERTY( Shown , bool , Show , IsShown , wxxVariant((bool)true) , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) #if 0 // possible property candidates (not in xrc) or not valid in all subclasses - wxPROPERTY( Title,wxString, SetTitle, GetTitle, wxT("") ) - wxPROPERTY( Font , wxFont , SetFont , GetWindowFont , ) - wxPROPERTY( Label,wxString, SetLabel, GetLabel, wxT("") ) - // MaxHeight, Width , MinHeight , Width - // TODO switch label to control and title to toplevels + wxPROPERTY( Title,wxString, SetTitle, GetTitle, wxT("") ) + wxPROPERTY( Font , wxFont , SetFont , GetWindowFont , ) + wxPROPERTY( Label,wxString, SetLabel, GetLabel, wxT("") ) + // MaxHeight, Width , MinHeight , Width + // TODO switch label to control and title to toplevels - wxPROPERTY( ThemeEnabled , bool , SetThemeEnabled , GetThemeEnabled , ) - //wxPROPERTY( Cursor , wxCursor , SetCursor , GetCursor , ) - // wxPROPERTY( ToolTip , wxString , SetToolTip , GetToolTipText , ) - wxPROPERTY( AutoLayout , bool , SetAutoLayout , GetAutoLayout , ) + wxPROPERTY( ThemeEnabled , bool , SetThemeEnabled , GetThemeEnabled , ) + //wxPROPERTY( Cursor , wxCursor , SetCursor , GetCursor , ) + // wxPROPERTY( ToolTip , wxString , SetToolTip , GetToolTipText , ) + wxPROPERTY( AutoLayout , bool , SetAutoLayout , GetAutoLayout , ) @@ -902,11 +908,12 @@ void wxWindowMSW::ScrollWindow(int dx, int dy, const wxRect *prect) else { pr = NULL; + } #ifdef __WXWINCE__ // FIXME: is this the exact equivalent of the line below? - ::ScrollWindowEx(GetHwnd(), dx, dy, pr, pr, 0, 0, SW_ERASE|SW_INVALIDATE); + ::ScrollWindowEx(GetHwnd(), dx, dy, pr, pr, 0, 0, SW_SCROLLCHILDREN|SW_ERASE|SW_INVALIDATE); #else ::ScrollWindow(GetHwnd(), dx, dy, pr, pr); #endif @@ -969,7 +976,7 @@ void wxWindowMSW::SubclassWin(WXHWND hWnd) // we don't need to subclass the window of our own class (in the Windows // sense of the word) - if ( !wxCheckWindowWndProc(hWnd, (WXFARPROC)wxWndProc) ) + if ( !wxCheckWindowWndProc(hWnd, (WXFARPROC)wxWndProc) ) { wxSetWindowProc(hwnd, wxWndProc); } @@ -977,7 +984,7 @@ void wxWindowMSW::SubclassWin(WXHWND hWnd) { // don't bother restoring it neither: this also makes it easy to // implement IsOfStandardClass() method which returns true for the - // standard controls and false for the wxWindows own windows as it can + // standard controls and false for the wxWidgets own windows as it can // simply check m_oldWndProc m_oldWndProc = NULL; } @@ -1016,26 +1023,26 @@ bool wxCheckWindowWndProc(WXHWND hWnd, WXFARPROC wndProc) // Unicows_{Set,Get}WindowLong and Unicows_RegisterClass to our own // versions that keep track of fake<->real wnd proc mapping. - // On WinCE (at least), the wndproc comparison doesn't work, - // so have to use something like this. + // On WinCE (at least), the wndproc comparison doesn't work, + // so have to use something like this. #ifdef __WXWINCE__ - extern const wxChar *wxCanvasClassName; - extern const wxChar *wxCanvasClassNameNR; - extern const wxChar *wxMDIFrameClassName; - extern const wxChar *wxMDIFrameClassNameNoRedraw; - extern const wxChar *wxMDIChildFrameClassName; - extern const wxChar *wxMDIChildFrameClassNameNoRedraw; - wxString str(wxGetWindowClass(hWnd)); - if (str == wxCanvasClassName || - str == wxCanvasClassNameNR || - str == wxMDIFrameClassName || - str == wxMDIFrameClassNameNoRedraw || - str == wxMDIChildFrameClassName || - str == wxMDIChildFrameClassNameNoRedraw || - str == _T("wxTLWHiddenParent")) - return true; // Effectively means don't subclass - else - return false; + extern wxChar *wxCanvasClassName; + extern wxChar *wxCanvasClassNameNR; + extern const wxChar *wxMDIFrameClassName; + extern const wxChar *wxMDIFrameClassNameNoRedraw; + extern const wxChar *wxMDIChildFrameClassName; + extern const wxChar *wxMDIChildFrameClassNameNoRedraw; + wxString str(wxGetWindowClass(hWnd)); + if (str == wxCanvasClassName || + str == wxCanvasClassNameNR || + str == wxMDIFrameClassName || + str == wxMDIFrameClassNameNoRedraw || + str == wxMDIChildFrameClassName || + str == wxMDIChildFrameClassNameNoRedraw || + str == _T("wxTLWHiddenParent")) + return true; // Effectively means don't subclass + else + return false; #else WNDCLASS cls; if ( !::GetClassInfo(wxGetInstance(), wxGetWindowClass(hWnd), &cls) ) @@ -1109,8 +1116,11 @@ void wxWindowMSW::SetWindowStyleFlag(long flags) WXDWORD wxWindowMSW::MSWGetStyle(long flags, WXDWORD *exstyle) const { - // translate the style - WXDWORD style = WS_CHILD | WS_VISIBLE; + // translate common wxWidgets styles to Windows ones + + // most of windows are child ones, those which are not (such as + // wxTopLevelWindow) should remove WS_CHILD in their MSWGetStyle() + WXDWORD style = WS_CHILD; if ( flags & wxCLIP_CHILDREN ) style |= WS_CLIPCHILDREN; @@ -1491,7 +1501,7 @@ void wxWindowMSW::DoMoveWindow(int x, int y, int width, int height) width = 0; if (height < 0) height = 0; - if ( !::MoveWindow(GetHwnd(), x, y, width, height, TRUE) ) + if ( !::MoveWindow(GetHwnd(), x, y, width, height, IsShown() /*Repaint?*/) ) { wxLogLastError(wxT("MoveWindow")); } @@ -1520,15 +1530,15 @@ void wxWindowMSW::DoSetSize(int x, int y, int width, int height, int sizeFlags) return; } - if ( x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) ) + if ( x == wxDefaultPosition.x && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) ) x = currentX; - if ( y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) ) + if ( y == wxDefaultPosition.y && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) ) y = currentY; AdjustForParentClientOrigin(x, y, sizeFlags); - wxSize size(-1, -1); - if ( width == -1 ) + wxSize size = wxDefaultSize; + if ( width == wxDefaultSize.x ) { if ( sizeFlags & wxSIZE_AUTO_WIDTH ) { @@ -1542,11 +1552,11 @@ void wxWindowMSW::DoSetSize(int x, int y, int width, int height, int sizeFlags) } } - if ( height == -1 ) + if ( height == wxDefaultSize.y ) { if ( sizeFlags & wxSIZE_AUTO_HEIGHT ) { - if ( size.x == -1 ) + if ( size.x == wxDefaultSize.x ) { size = DoGetBestSize(); } @@ -1584,8 +1594,8 @@ void wxWindowMSW::DoSetClientSize(int width, int height) ::GetClientRect(GetHwnd(), &rectClient); // if the size is already ok, stop here (rectClient.left = top = 0) - if ( (rectClient.right == width || width == -1) && - (rectClient.bottom == height || height == -1) ) + if ( (rectClient.right == width || width == wxDefaultSize.x) && + (rectClient.bottom == height || height == wxDefaultSize.y) ) { break; } @@ -2132,7 +2142,7 @@ void wxWindowMSW::UnpackMenuSelect(WXWPARAM wParam, WXLPARAM lParam, } // --------------------------------------------------------------------------- -// Main wxWindows window proc and the window proc for wxWindow +// Main wxWidgets window proc and the window proc for wxWindow // --------------------------------------------------------------------------- // Hook for new window just as it's being created, when the window isn't yet @@ -2519,10 +2529,6 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l break; #endif // __WXMICROWIN__ - case WM_SYSCOMMAND: - processed = HandleSysCommand(wParam, lParam); - break; - case WM_COMMAND: { WORD id, cmd; @@ -2949,7 +2955,7 @@ wxWinHashTable *wxWinHandleHash = NULL; wxWindow *wxFindWinFromHandle(WXHWND hWnd) { - return wxWinHandleHash->Get((long)hWnd); + return (wxWindow*)wxWinHandleHash->Get((long)hWnd); } void wxAssociateWinWithHandle(HWND hWnd, wxWindowMSW *win) @@ -2999,7 +3005,7 @@ bool wxWindowMSW::MSWGetCreateWindowCoords(const wxPoint& pos, bool nonDefault = false; - if ( pos.x == -1 ) + if ( pos.x == wxDefaultPosition.x ) { // if x is set to CW_USEDEFAULT, y parameter is ignored anyhow so we // can just as well set it to CW_USEDEFAULT as well @@ -3012,7 +3018,7 @@ bool wxWindowMSW::MSWGetCreateWindowCoords(const wxPoint& pos, // neither because it is not handled as a special value by Windows then // and so we have to choose some default value for it x = pos.x; - y = pos.y == -1 ? DEFAULT_Y : pos.y; + y = pos.y == wxDefaultPosition.y ? DEFAULT_Y : pos.y; nonDefault = true; } @@ -3020,7 +3026,7 @@ bool wxWindowMSW::MSWGetCreateWindowCoords(const wxPoint& pos, /* NB: there used to be some code here which set the initial size of the window to the client size of the parent if no explicit size was - specified. This was wrong because wxWindows programs often assume + specified. This was wrong because wxWidgets programs often assume that they get a WM_SIZE (EVT_SIZE) upon creation, however this broke it. To see why, you should understand that Windows sends WM_SIZE from inside ::CreateWindow() anyhow. However, ::CreateWindow() is called @@ -3029,7 +3035,7 @@ bool wxWindowMSW::MSWGetCreateWindowCoords(const wxPoint& pos, event goes to some base class OnSize() instead). So the WM_SIZE we rely on is the one sent when the parent frame resizes its children but here is the problem: if the child already has just the right - size, nothing will happen as both wxWindows and Windows check for + size, nothing will happen as both wxWidgets and Windows check for this and ignore any attempts to change the window size to the size it already has - so no WM_SIZE would be sent. */ @@ -3039,7 +3045,7 @@ bool wxWindowMSW::MSWGetCreateWindowCoords(const wxPoint& pos, // // 1. it results in huge frames on modern screens (1000*800 is not // uncommon on my 1280*1024 screen) which is way too big for a half - // empty frame of most of wxWindows samples for example) + // empty frame of most of wxWidgets samples for example) // // 2. it is buggy for frames with wxFRAME_TOOL_WINDOW style for which // the default is for whatever reason 8*8 which breaks client <-> @@ -3052,12 +3058,26 @@ bool wxWindowMSW::MSWGetCreateWindowCoords(const wxPoint& pos, // level window in some smart way which we can't do, but we can // guess a reasonably good size for a new window just as well // ourselves - if ( size.x == -1 || size.y == -1) + + // However, on PocketPC devices, we must use the default + // size if possible. +#ifdef _WIN32_WCE + if (size.x == wxDefaultSize.x) + w = CW_USEDEFAULT; + else + w = size.x; + if (size.y == wxDefaultSize.y) + h = CW_USEDEFAULT; + else + h = size.y; +#else + if ( size.x == wxDefaultSize.x || size.y == wxDefaultSize.y) { nonDefault = true; } w = WidthDefault(size.x); h = HeightDefault(size.y); +#endif AdjustForParentClientOrigin(x, y); @@ -3096,6 +3116,7 @@ bool wxWindowMSW::MSWCreate(const wxChar *wclass, // do create the window wxWindowCreationHook hook(this); + // VZ: anyonce cares to explain why is this done for CE? #ifdef __WXWINCE__ if (extendedStyle == 0) { @@ -3112,7 +3133,7 @@ bool wxWindowMSW::MSWCreate(const wxChar *wclass, ); } else -#endif +#endif // __WXWINCE__ { m_hWnd = (WXHWND)::CreateWindowEx ( @@ -3300,7 +3321,7 @@ bool wxWindowMSW::MSWOnNotify(int WXUNUSED(idCtrl), bool wxWindowMSW::HandleQueryEndSession(long logOff, bool *mayEnd) { #ifndef __WXWINCE__ - wxCloseEvent event(wxEVT_QUERY_END_SESSION, -1); + wxCloseEvent event(wxEVT_QUERY_END_SESSION, wxID_ANY); event.SetEventObject(wxTheApp); event.SetCanVeto(true); event.SetLoggingOff(logOff == (long)ENDSESSION_LOGOFF); @@ -3331,7 +3352,7 @@ bool wxWindowMSW::HandleEndSession(bool endSession, long logOff) if ( (this != wxTheApp->GetTopWindow()) ) return false; - wxCloseEvent event(wxEVT_END_SESSION, -1); + wxCloseEvent event(wxEVT_END_SESSION, wxID_ANY); event.SetEventObject(wxTheApp); event.SetCanVeto(false); event.SetLoggingOff( (logOff == (long)ENDSESSION_LOGOFF) ); @@ -3844,7 +3865,7 @@ bool wxWindowMSW::HandleQueryNewPalette() while (!win->HasCustomPalette() && win->GetParent()) win = win->GetParent(); if (win->HasCustomPalette()) { /* realize the palette to see whether redrawing is needed */ - HDC hdc = GetDC((HWND) GetHWND()); + HDC hdc = ::GetDC((HWND) GetHWND()); win->m_palette.SetHPALETTE( (WXHPALETTE) ::SelectPalette(hdc, (HPALETTE) win->m_palette.GetHPALETTE(), FALSE) ); @@ -4168,25 +4189,25 @@ bool wxWindowMSW::HandleGetMinMaxInfo(void *mmInfo) maxWidth = GetMaxWidth(), maxHeight = GetMaxHeight(); - if ( minWidth != -1 ) + if ( minWidth != wxDefaultSize.x ) { info->ptMinTrackSize.x = minWidth; rc = true; } - if ( minHeight != -1 ) + if ( minHeight != wxDefaultSize.y ) { info->ptMinTrackSize.y = minHeight; rc = true; } - if ( maxWidth != -1 ) + if ( maxWidth != wxDefaultSize.x ) { info->ptMaxTrackSize.x = maxWidth; rc = true; } - if ( maxHeight != -1 ) + if ( maxHeight != wxDefaultSize.y ) { info->ptMaxTrackSize.y = maxHeight; rc = true; @@ -4264,23 +4285,6 @@ bool wxWindowMSW::HandleCommand(WXWORD id, WXWORD cmd, WXHWND control) return false; } -bool wxWindowMSW::HandleSysCommand(WXWPARAM wParam, WXLPARAM WXUNUSED(lParam)) -{ -#ifndef __WXWINCE__ - // 4 bits are reserved - switch ( wParam & 0xFFFFFFF0 ) - { - case SC_MAXIMIZE: - return HandleMaximize(); - - case SC_MINIMIZE: - return HandleMinimize(); - } -#endif - - return false; -} - // --------------------------------------------------------------------------- // mouse events // --------------------------------------------------------------------------- @@ -5019,8 +5023,10 @@ int wxCharCodeWXToMSW(int id, bool *isVirtual) case WXK_CLEAR: keySym = VK_CLEAR; break; case WXK_SHIFT: keySym = VK_SHIFT; break; case WXK_CONTROL: keySym = VK_CONTROL; break; + case WXK_ALT: keySym = VK_MENU; break; case WXK_MENU : keySym = VK_MENU; break; case WXK_PAUSE: keySym = VK_PAUSE; break; + case WXK_CAPITAL: keySym = VK_CAPITAL; break; case WXK_PRIOR: keySym = VK_PRIOR; break; case WXK_NEXT : keySym = VK_NEXT; break; case WXK_END: keySym = VK_END; break; @@ -5090,12 +5096,24 @@ bool wxGetKeyState(wxKeyCode key) { bool bVirtual; int vkey = wxCharCodeWXToMSW(key, &bVirtual); - - //there aren't WXK_ macros for non-virtual key codes - if (bVirtual == false) - return false; + SHORT state; - return GetKeyState(vkey) < 0; + switch (key) + { + case WXK_NUMLOCK: + case WXK_CAPITAL: + case WXK_SCROLL: + // get the toggle state of the special key + state = GetKeyState(vkey); + break; + + default: + // Get the current state of the physical key + state = GetAsyncKeyState(vkey); + break; + } + // if the most significant bit is set then the key is down + return ( state & 0x0001 ) != 0; } wxWindow *wxGetActiveWindow() @@ -5224,7 +5242,7 @@ wxKeyboardHook(int nCode, WORD wParam, DWORD lParam) else { handler = wxTheApp; - event.SetId(-1); + event.SetId(wxID_ANY); } if ( handler && handler->ProcessEvent(event) ) @@ -5805,9 +5823,9 @@ bool wxWindowMSW::HandleHotKey(WXWPARAM wParam, WXLPARAM lParam) class wxIdleWakeUpModule : public wxModule { public: - virtual bool OnInit() + virtual bool OnInit() { - ms_hMsgHookProc = ::SetWindowsHookEx + ms_hMsgHookProc = ::SetWindowsHookEx ( WH_GETMESSAGE, &wxIdleWakeUpModule::MsgHookProc, @@ -5823,26 +5841,26 @@ public: } return true; - } + } - virtual void OnExit() + virtual void OnExit() { - ::UnhookWindowsHookEx(wxIdleWakeUpModule::ms_hMsgHookProc); - } + ::UnhookWindowsHookEx(wxIdleWakeUpModule::ms_hMsgHookProc); + } - static LRESULT CALLBACK MsgHookProc(int nCode, WPARAM wParam, LPARAM lParam) + static LRESULT CALLBACK MsgHookProc(int nCode, WPARAM wParam, LPARAM lParam) { - MSG *msg = (MSG*)lParam; - if ( msg->message == WM_NULL ) - { + MSG *msg = (MSG*)lParam; + if ( msg->message == WM_NULL ) + { wxTheApp->ProcessPendingEvents(); - } + } - return CallNextHookEx(ms_hMsgHookProc, nCode, wParam, lParam); - }; + return CallNextHookEx(ms_hMsgHookProc, nCode, wParam, lParam); + }; private: - static HHOOK ms_hMsgHookProc; + static HHOOK ms_hMsgHookProc; DECLARE_DYNAMIC_CLASS(wxIdleWakeUpModule) }; @@ -5852,4 +5870,4 @@ HHOOK wxIdleWakeUpModule::ms_hMsgHookProc = 0; IMPLEMENT_DYNAMIC_CLASS(wxIdleWakeUpModule, wxModule) #endif // __WXWINCE__ - +