Make wx{List,Tree}Ctrl resize their standard font if the user changes the system font.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37707 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Jamie Gadd
2006-02-24 14:19:12 +00:00
parent 605c2c4ac6
commit 3c96418b71
6 changed files with 78 additions and 38 deletions

View File

@@ -134,6 +134,8 @@ wxMSW:
- Link oleacc.lib conditionally. - Link oleacc.lib conditionally.
- Drag and drop now works inside static boxes. - Drag and drop now works inside static boxes.
- Fall back to unthemed wxNotebook if specified orientation not available. - 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: wxGTK:

View File

@@ -87,11 +87,6 @@ public:
virtual bool MSWShouldPreProcessMessage(WXMSG* pMsg); virtual bool MSWShouldPreProcessMessage(WXMSG* pMsg);
#endif // __SMARTPHONE__ && __WXWINCE__ #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 // translate wxWidgets flags to Windows ones
virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle) const; virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle) const;

View File

@@ -299,6 +299,7 @@ public:
bool HandleSysColorChange(); bool HandleSysColorChange();
bool HandleDisplayChange(); bool HandleDisplayChange();
bool HandleCaptureChanged(WXHWND gainedCapture); bool HandleCaptureChanged(WXHWND gainedCapture);
bool HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam);
bool HandleQueryEndSession(long logOff, bool *mayEnd); bool HandleQueryEndSession(long logOff, bool *mayEnd);
bool HandleEndSession(bool endSession, long logOff); bool HandleEndSession(bool endSession, long logOff);

View File

@@ -36,9 +36,13 @@
#include "wx/control.h" #include "wx/control.h"
#if wxUSE_NOTEBOOK #if wxUSE_LISTCTRL
#include "wx/notebook.h" #include "wx/listctrl.h"
#endif // wxUSE_NOTEBOOK #endif // wxUSE_LISTCTRL
#if wxUSE_TREECTRL
#include "wx/treectrl.h"
#endif // wxUSE_TREECTRL
#include "wx/msw/private.h" #include "wx/msw/private.h"
#include "wx/msw/uxtheme.h" #include "wx/msw/uxtheme.h"
@@ -165,8 +169,33 @@ bool wxControl::MSWCreateControl(const wxChar *classname,
// set up fonts and colours // set up fonts and colours
InheritAttributes(); InheritAttributes();
if (!m_hasFont) if ( !m_hasFont )
SetFont(GetDefaultAttributes().font); {
#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 // set the size now if no initial size specified
SetInitialBestSize(size); SetInitialBestSize(size);

View File

@@ -312,15 +312,6 @@ WXHWND wxTopLevelWindowMSW::MSWGetParent() const
return (WXHWND)hwndParent; 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 wxTopLevelWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{ {
WXLRESULT rc = 0; WXLRESULT rc = 0;
@@ -345,11 +336,6 @@ WXLRESULT wxTopLevelWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WX
break; break;
} }
case WM_SETTINGCHANGE:
{
processed = HandleSettingChange(wParam,lParam);
break;
}
case WM_HIBERNATE: case WM_HIBERNATE:
{ {
if (wxTheApp) if (wxTheApp)
@@ -1095,8 +1081,8 @@ void wxTopLevelWindowMSW::OnActivate(wxActivateEvent& event)
LONG APIENTRY _EXPORT LONG APIENTRY _EXPORT
wxDlgProc(HWND hDlg, wxDlgProc(HWND hDlg,
UINT message, UINT message,
WPARAM wParam, WPARAM WXUNUSED(wParam),
LPARAM lParam) LPARAM WXUNUSED(lParam))
{ {
switch ( message ) switch ( message )
{ {
@@ -1128,18 +1114,6 @@ wxDlgProc(HWND hDlg,
// ourselves, we return FALSE for it as well // ourselves, we return FALSE for it as well
return FALSE; 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 // for almost all messages, returning FALSE means that we didn't process

View File

@@ -2849,6 +2849,10 @@ WXLRESULT wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM l
processed = HandleCaptureChanged((WXHWND) (HWND) lParam); processed = HandleCaptureChanged((WXHWND) (HWND) lParam);
break; break;
case WM_SETTINGCHANGE:
processed = HandleSettingChange(wParam, lParam);
break;
case WM_QUERYNEWPALETTE: case WM_QUERYNEWPALETTE:
processed = HandleQueryNewPalette(); processed = HandleQueryNewPalette();
break; break;
@@ -3933,6 +3937,41 @@ bool wxWindowMSW::HandleCaptureChanged(WXHWND hWndGainedCapture)
return GetEventHandler()->ProcessEvent(event); 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() bool wxWindowMSW::HandleQueryNewPalette()
{ {