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.
|
||||
- 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:
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -36,9 +36,13 @@
|
||||
|
||||
#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);
|
||||
|
@@ -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
|
||||
|
@@ -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()
|
||||
{
|
||||
|
||||
|
Reference in New Issue
Block a user