]> git.saurik.com Git - wxWidgets.git/commitdiff
Make wx{List,Tree}Ctrl resize their standard font if the user changes the system...
authorJamie Gadd <jrgadd2@cs.latrobe.edu.au>
Fri, 24 Feb 2006 14:19:12 +0000 (14:19 +0000)
committerJamie Gadd <jrgadd2@cs.latrobe.edu.au>
Fri, 24 Feb 2006 14:19:12 +0000 (14:19 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37707 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/msw/toplevel.h
include/wx/msw/window.h
src/msw/control.cpp
src/msw/toplevel.cpp
src/msw/window.cpp

index 493d21b9bffe2b11e3e4d6027cf562890f546641..6d7cc77b545ce01f930e7f85aaed06e5c2f92635 100644 (file)
@@ -134,6 +134,8 @@ wxMSW:
 - Link oleacc.lib conditionally.
 - Drag and drop now works inside static boxes.
 - Fall back to unthemed wxNotebook if specified orientation not available.
+- wxListCtrl and wxTreeCtrl now resize their standard font if the user
+  changes the system font.
 
 wxGTK:
 
index 3647a33b9b62a938f1267201014e7aa9d2ee8434..e36cedce9638f640ae061dd2b7d5dad6a083540e 100644 (file)
@@ -87,11 +87,6 @@ public:
     virtual bool MSWShouldPreProcessMessage(WXMSG* pMsg);
 #endif // __SMARTPHONE__ && __WXWINCE__
 
-#if defined(__SMARTPHONE__) || defined(__POCKETPC__)
-    // Soft Input Panel (SIP) change notification
-    virtual bool HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam);
-#endif
-
     // translate wxWidgets flags to Windows ones
     virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle) const;
 
index 3b7ad3fb3c42d2e1bebe79eea08fc60479433415..e95c957a2f281843f5c2fce2e6a6167e29e35890 100644 (file)
@@ -299,6 +299,7 @@ public:
     bool HandleSysColorChange();
     bool HandleDisplayChange();
     bool HandleCaptureChanged(WXHWND gainedCapture);
+    bool HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam);
 
     bool HandleQueryEndSession(long logOff, bool *mayEnd);
     bool HandleEndSession(bool endSession, long logOff);
index a5a7431b762dd7b896606d0a4056da23b0fd5577..e8a3e921d881365a58ef68c5a6df065c2c258cbc 100644 (file)
 
 #include "wx/control.h"
 
-#if wxUSE_NOTEBOOK
-    #include "wx/notebook.h"
-#endif // wxUSE_NOTEBOOK
+#if wxUSE_LISTCTRL
+    #include "wx/listctrl.h"
+#endif // wxUSE_LISTCTRL
+
+#if wxUSE_TREECTRL
+    #include "wx/treectrl.h"
+#endif // wxUSE_TREECTRL
 
 #include "wx/msw/private.h"
 #include "wx/msw/uxtheme.h"
@@ -165,8 +169,33 @@ bool wxControl::MSWCreateControl(const wxChar *classname,
 
     // set up fonts and colours
     InheritAttributes();
-    if (!m_hasFont)
-        SetFont(GetDefaultAttributes().font);
+    if ( !m_hasFont )
+    {
+#if wxUSE_LISTCTRL || wxUSE_TREECTRL
+        // if we set a font for {list,tree}ctrls and the font size is changed in
+        // the display properties then the font size for these controls doesn't
+        // automatically adjust when they receive WM_SETTINGCHANGE
+        if ( wxDynamicCastThis(wxListCtrl) || wxDynamicCastThis(wxTreeCtrl) )
+        {
+            // not sure if we need to explicitly set the font here for Win95/NT4
+            // but we definitely can't do it for any newer version
+            // see wxGetCCDefaultFont() in src/msw/settings.cpp for explanation
+            // of why this test works
+
+            // TODO: test Win95/NT4 to see if this is needed or breaks the
+            // font resizing as it does on newer versions
+            wxFont font = GetDefaultAttributes().font;
+            if ( font == wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT) )
+            {
+                SetFont(font);
+            }
+        }
+        else
+#endif // wxUSE_LISTCTRL || wxUSE_TREECTRL
+        {
+            SetFont(GetDefaultAttributes().font);
+        }
+    }
 
     // set the size now if no initial size specified
     SetInitialBestSize(size);
index e861e661ef9bba116c5516bfb1c352673ec6515f..fb4efe5882e2e543a7c2b18890aa0a00d9103d38 100644 (file)
@@ -312,15 +312,6 @@ WXHWND wxTopLevelWindowMSW::MSWGetParent() const
     return (WXHWND)hwndParent;
 }
 
-#if defined(__SMARTPHONE__) || defined(__POCKETPC__)
-bool wxTopLevelWindowMSW::HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam)
-{
-    SHACTIVATEINFO* info = (SHACTIVATEINFO*) m_activateInfo;
-    if (!info) return false;
-    return SHHandleWMSettingChange(GetHwnd(), wParam, lParam, info) == TRUE;
-}
-#endif
-
 WXLRESULT wxTopLevelWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
 {
     WXLRESULT rc = 0;
@@ -345,11 +336,6 @@ WXLRESULT wxTopLevelWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WX
 
             break;
         }
-        case WM_SETTINGCHANGE:
-        {
-            processed = HandleSettingChange(wParam,lParam);
-            break;
-        }
         case WM_HIBERNATE:
         {
             if (wxTheApp)
@@ -1095,8 +1081,8 @@ void wxTopLevelWindowMSW::OnActivate(wxActivateEvent& event)
 LONG APIENTRY _EXPORT
 wxDlgProc(HWND hDlg,
           UINT message,
-          WPARAM wParam,
-          LPARAM lParam)
+          WPARAM WXUNUSED(wParam),
+          LPARAM WXUNUSED(lParam))
 {
     switch ( message )
     {
@@ -1128,18 +1114,6 @@ wxDlgProc(HWND hDlg,
             // ourselves, we return FALSE for it as well
             return FALSE;
         }
-
-        case WM_SETTINGCHANGE:
-        {
-#if defined(__SMARTPHONE__) || defined(__POCKETPC__)
-            wxTopLevelWindow *tlw = wxDynamicCast(wxGetWindowFromHWND(hDlg), wxTopLevelWindow);
-            if(tlw) return tlw->HandleSettingChange(wParam,lParam) ? TRUE : FALSE;
-#else
-            wxUnusedVar(wParam);
-            wxUnusedVar(lParam);
-#endif
-            break;
-        }
     }
 
     // for almost all messages, returning FALSE means that we didn't process
index 7328f6539a62f0116302273604299c0a0f5df177..ded4f2b2caae4443325868de143dfa2b8da9d432 100644 (file)
@@ -2849,6 +2849,10 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l
             processed = HandleCaptureChanged((WXHWND) (HWND) lParam);
             break;
 
+        case WM_SETTINGCHANGE:
+            processed = HandleSettingChange(wParam, lParam);
+            break;
+
         case WM_QUERYNEWPALETTE:
             processed = HandleQueryNewPalette();
             break;
@@ -3933,6 +3937,41 @@ bool wxWindowMSW::HandleCaptureChanged(WXHWND hWndGainedCapture)
     return GetEventHandler()->ProcessEvent(event);
 }
 
+bool wxWindowMSW::HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam)
+{
+    // despite MSDN saying "(This message cannot be sent directly to a window.)"
+    // we need to send this to child windows (it is only sent to top-level
+    // windows) so {list,tree}ctrls can adjust their font size if necessary
+    // this is exactly how explorer does it to enable the font size changes
+
+    wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
+    while ( node )
+    {
+        // top-level windows already get this message from the system
+        wxWindow *win = node->GetData();
+        if ( !win->IsTopLevel() )
+        {
+            ::SendMessage(GetHwndOf(win), WM_SETTINGCHANGE, wParam, lParam);
+        }
+
+        node = node->GetNext();
+    }
+
+#if defined(__SMARTPHONE__) || defined(__POCKETPC__)
+    if ( IsTopLevel() )
+    {
+        SHACTIVATEINFO *info = (SHACTIVATEINFO*) m_activateInfo;
+        if ( info )
+        {
+            return SHHandleWMSettingChange(GetHwnd(), wParam, lParam, info) == TRUE;
+        }
+    }
+#endif // defined(__SMARTPHONE__) || defined(__POCKETPC__)
+
+    // let the system handle it
+    return false;
+}
+
 bool wxWindowMSW::HandleQueryNewPalette()
 {