]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/window.cpp
ActiveX events should be sent to the window, not it's parent.
[wxWidgets.git] / src / msw / window.cpp
index ab71a46b95e9ac22dca30d6b5c39ea80f6eaf4cb..7f052f7405f84fdcb409edbb750700be06aff7bc 100644 (file)
 wxMenu *wxCurrentPopupMenu = NULL;
 #endif // wxUSE_MENUS_NATIVE
 
 wxMenu *wxCurrentPopupMenu = NULL;
 #endif // wxUSE_MENUS_NATIVE
 
+#ifdef __WXWINCE__
+extern       wxChar *wxCanvasClassName;
+#else
 extern const wxChar *wxCanvasClassName;
 extern const wxChar *wxCanvasClassName;
+#endif
 
 // true if we had already created the std colour map, used by
 // wxGetStdColourMap() and wxWindow::OnSysColourChanged()           (FIXME-MT)
 
 // 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)
 {
 // 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.
      */
        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);
     while ( parent && !parent->IsTopLevel() )
     {
         LONG exStyle = ::GetWindowLong(GetHwndOf(parent), GWL_EXSTYLE);
@@ -209,9 +214,10 @@ static void EnsureParentHasControlParentStyle(wxWindow *parent)
 
         parent = parent->GetParent();
     }
 
         parent = parent->GetParent();
     }
-#endif // !__WXWINCE__
 }
 
 }
 
+#endif // !__WXWINCE__
+
 // ---------------------------------------------------------------------------
 // event tables
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 // event tables
 // ---------------------------------------------------------------------------
@@ -280,16 +286,16 @@ wxBEGIN_FLAGS( wxWindowStyle )
 wxEND_FLAGS( wxWindowStyle )
 
 wxBEGIN_PROPERTIES_TABLE(wxWindow)
 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
 
     // 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, -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 , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style
 
     // Then all relations of the object graph
 
 
     // Then all relations of the object graph
 
@@ -297,23 +303,23 @@ wxBEGIN_PROPERTIES_TABLE(wxWindow)
 
    // and finally all other properties
 
 
    // 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
 #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;
     else
     {
         pr = NULL;
+
     }
 
 #ifdef __WXWINCE__
     // FIXME: is this the exact equivalent of the line below?
     }
 
 #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
 #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)
 
     // 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);
     }
     {
         wxSetWindowProc(hwnd, wxWndProc);
     }
@@ -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.
 
     // 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__
 #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) )
 #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
 {
 
 WXDWORD wxWindowMSW::MSWGetStyle(long flags, WXDWORD *exstyle) const
 {
-    // translate the style
-    WXDWORD style = WS_CHILD | WS_VISIBLE;
+    // translate common wxWindows 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;
 
     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;
         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"));
     }
     {
         wxLogLastError(wxT("MoveWindow"));
     }
@@ -3052,12 +3062,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
     //     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
+
+    // However, on PocketPC devices, we must use the default
+    // size if possible.
+#ifdef _WIN32_WCE
+    if (size.x == -1)
+        w = CW_USEDEFAULT;
+    else
+        w = size.x;
+    if (size.y == -1)
+        h = CW_USEDEFAULT;
+    else
+        h = size.y;
+#else
     if ( size.x == -1 || size.y == -1)
     {
         nonDefault = true;
     }
     w = WidthDefault(size.x);
     h = HeightDefault(size.y);
     if ( size.x == -1 || size.y == -1)
     {
         nonDefault = true;
     }
     w = WidthDefault(size.x);
     h = HeightDefault(size.y);
+#endif
 
     AdjustForParentClientOrigin(x, y);
 
 
     AdjustForParentClientOrigin(x, y);
 
@@ -3096,6 +3120,7 @@ bool wxWindowMSW::MSWCreate(const wxChar *wclass,
     // do create the window
     wxWindowCreationHook hook(this);
 
     // do create the window
     wxWindowCreationHook hook(this);
 
+    // VZ: anyonce cares to explain why is this done for CE?
 #ifdef __WXWINCE__
     if (extendedStyle == 0)
     {
 #ifdef __WXWINCE__
     if (extendedStyle == 0)
     {
@@ -3112,7 +3137,7 @@ bool wxWindowMSW::MSWCreate(const wxChar *wclass,
             );
     }
     else
             );
     }
     else
-#endif
+#endif // __WXWINCE__
     {
         m_hWnd = (WXHWND)::CreateWindowEx
             (
     {
         m_hWnd = (WXHWND)::CreateWindowEx
             (
@@ -3137,8 +3162,6 @@ bool wxWindowMSW::MSWCreate(const wxChar *wclass,
 
     SubclassWin(m_hWnd);
 
 
     SubclassWin(m_hWnd);
 
-    SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
-
     return true;
 }
 
     return true;
 }
 
@@ -3846,7 +3869,7 @@ bool wxWindowMSW::HandleQueryNewPalette()
     while (!win->HasCustomPalette() && win->GetParent()) win = win->GetParent();
     if (win->HasCustomPalette()) {
         /* realize the palette to see whether redrawing is needed */
     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) );
 
         win->m_palette.SetHPALETTE( (WXHPALETTE)
              ::SelectPalette(hdc, (HPALETTE) win->m_palette.GetHPALETTE(), FALSE) );
 
@@ -3898,16 +3921,14 @@ void wxWindowMSW::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(event))
 
     // update the colours we use if they were not set explicitly by the user:
     // this must be done or OnCtlColor() would continue to use the old colours
 
     // update the colours we use if they were not set explicitly by the user:
     // this must be done or OnCtlColor() would continue to use the old colours
-    if ( !m_hasFgCol )
+    if ( !m_hasFgCol || !m_hasBgCol )
     {
     {
-        m_foregroundColour = wxSystemSettings::
-                                GetSystemColour(wxSYS_COLOUR_WINDOWTEXT);
-    }
+        wxVisualAttributes attrs = GetDefaultAttributes();
+        if ( !m_hasFgCol )
+            m_foregroundColour = attrs.colFg;
 
 
-    if ( !m_hasBgCol )
-    {
-        m_backgroundColour = wxSystemSettings::
-                                GetSystemColour(wxSYS_COLOUR_BTNFACE);
+        if ( !m_hasBgCol )
+            m_backgroundColour = attrs.colBg;
     }
 }
 
     }
 }
 
@@ -5809,9 +5830,9 @@ bool wxWindowMSW::HandleHotKey(WXWPARAM wParam, WXLPARAM lParam)
 class wxIdleWakeUpModule : public wxModule
 {
 public:
 class wxIdleWakeUpModule : public wxModule
 {
 public:
-       virtual bool OnInit()
+    virtual bool OnInit()
     {
     {
-               ms_hMsgHookProc = ::SetWindowsHookEx
+        ms_hMsgHookProc = ::SetWindowsHookEx
                             (
                              WH_GETMESSAGE,
                              &wxIdleWakeUpModule::MsgHookProc,
                             (
                              WH_GETMESSAGE,
                              &wxIdleWakeUpModule::MsgHookProc,
@@ -5827,26 +5848,26 @@ public:
         }
 
         return true;
         }
 
         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();
             wxTheApp->ProcessPendingEvents();
-               }
+        }
 
 
-               return CallNextHookEx(ms_hMsgHookProc, nCode, wParam, lParam);
-       };
+        return CallNextHookEx(ms_hMsgHookProc, nCode, wParam, lParam);
+    };
 
 private:
 
 private:
-       static HHOOK ms_hMsgHookProc;
+    static HHOOK ms_hMsgHookProc;
 
     DECLARE_DYNAMIC_CLASS(wxIdleWakeUpModule)
 };
 
     DECLARE_DYNAMIC_CLASS(wxIdleWakeUpModule)
 };
@@ -5856,4 +5877,4 @@ HHOOK wxIdleWakeUpModule::ms_hMsgHookProc = 0;
 IMPLEMENT_DYNAMIC_CLASS(wxIdleWakeUpModule, wxModule)
 
 #endif // __WXWINCE__
 IMPLEMENT_DYNAMIC_CLASS(wxIdleWakeUpModule, wxModule)
 
 #endif // __WXWINCE__
-    
+