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:
@@ -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:
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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
|
||||||
|
@@ -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()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user