[SHELL32][COMCTL32][BROWSEUI][EXPLORER] Update color usage on WM_SYSCOLORCHANGE (#7325)

This commit is contained in:
Whindmar Saksit 2024-09-14 13:07:11 +02:00 committed by GitHub
parent e2fc578f6d
commit 751641c2be
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 38 additions and 20 deletions

View file

@ -2542,6 +2542,11 @@ ChangePos:
return (LRESULT) GetStockObject(HOLLOW_BRUSH); return (LRESULT) GetStockObject(HOLLOW_BRUSH);
} }
LRESULT OnSysColorChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return SendMessageW(m_Rebar, uMsg, wParam, lParam);
}
LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{ {
RECT rcClient; RECT rcClient;
@ -3403,6 +3408,7 @@ HandleTrayContextMenu:
MESSAGE_HANDLER(WM_NCPAINT, OnNcPaint) MESSAGE_HANDLER(WM_NCPAINT, OnNcPaint)
MESSAGE_HANDLER(WM_NCACTIVATE, OnNcActivate) MESSAGE_HANDLER(WM_NCACTIVATE, OnNcActivate)
MESSAGE_HANDLER(WM_CTLCOLORBTN, OnCtlColorBtn) MESSAGE_HANDLER(WM_CTLCOLORBTN, OnCtlColorBtn)
MESSAGE_HANDLER(WM_SYSCOLORCHANGE, OnSysColorChange)
MESSAGE_HANDLER(WM_MOVING, OnMoving) MESSAGE_HANDLER(WM_MOVING, OnMoving)
MESSAGE_HANDLER(WM_SIZING, OnSizing) MESSAGE_HANDLER(WM_SIZING, OnSizing)
MESSAGE_HANDLER(WM_WINDOWPOSCHANGING, OnWindowPosChanging) MESSAGE_HANDLER(WM_WINDOWPOSCHANGING, OnWindowPosChanging)

View file

@ -714,7 +714,8 @@ LRESULT CBaseBarSite::OnCustomDraw(LPNMCUSTOMDRAW pnmcd)
REBARBANDINFO info; REBARBANDINFO info;
WCHAR wszTitle[MAX_PATH]; WCHAR wszTitle[MAX_PATH];
DWORD index; DWORD index;
RECT rt; UINT pad = GetSystemMetrics(SM_CXEDGE), leftpad = max(pad * 2, 4);
UINT btnw = 20, btnh = 18, btnarea = 1 + btnw + 1;
HFONT newFont, oldFont; HFONT newFont, oldFont;
index = SendMessage(RB_IDTOINDEX, fCurrentActiveBar->fBandID , 0); index = SendMessage(RB_IDTOINDEX, fCurrentActiveBar->fBandID , 0);
@ -722,20 +723,22 @@ LRESULT CBaseBarSite::OnCustomDraw(LPNMCUSTOMDRAW pnmcd)
ZeroMemory(wszTitle, sizeof(wszTitle)); ZeroMemory(wszTitle, sizeof(wszTitle));
DrawEdge(pnmcd->hdc, &pnmcd->rc, EDGE_ETCHED, BF_BOTTOM); DrawEdge(pnmcd->hdc, &pnmcd->rc, EDGE_ETCHED, BF_BOTTOM);
// We also resize our close button // We also resize our close button
::SetWindowPos(toolbarWnd, HWND_TOP, pnmcd->rc.right - 22, 0, 20, 18, SWP_SHOWWINDOW); ::SetWindowPos(toolbarWnd, HWND_TOP, pnmcd->rc.right - btnarea, 0, btnw, btnh, SWP_SHOWWINDOW);
// Draw the text // Draw the text
info.cch = MAX_PATH; info.cch = MAX_PATH;
info.lpText = wszTitle; info.lpText = wszTitle;
rt = pnmcd->rc; RECT rt = pnmcd->rc;
rt.right -= 24; rt.right -= btnarea;
rt.left += 2; rt.left += leftpad;
rt.bottom -= 1; rt.bottom -= 1;
if (FAILED_UNEXPECTEDLY(GetInternalBandInfo(index, &info, RBBIM_TEXT))) if (FAILED_UNEXPECTEDLY(GetInternalBandInfo(index, &info, RBBIM_TEXT)))
return CDRF_SKIPDEFAULT; return CDRF_SKIPDEFAULT;
newFont = GetTitleFont(); newFont = GetTitleFont();
if (newFont) if (newFont)
oldFont = (HFONT)SelectObject(pnmcd->hdc, newFont); oldFont = (HFONT)SelectObject(pnmcd->hdc, newFont);
COLORREF orgclrtxt = SetTextColor(pnmcd->hdc, GetSysColor(COLOR_BTNTEXT));
DrawText(pnmcd->hdc, info.lpText, -1, &rt, DT_SINGLELINE | DT_LEFT | DT_VCENTER); DrawText(pnmcd->hdc, info.lpText, -1, &rt, DT_SINGLELINE | DT_LEFT | DT_VCENTER);
SetTextColor(pnmcd->hdc, orgclrtxt);
SelectObject(pnmcd->hdc, oldFont); SelectObject(pnmcd->hdc, oldFont);
DeleteObject(newFont); DeleteObject(newFont);
return CDRF_SKIPDEFAULT; return CDRF_SKIPDEFAULT;

View file

@ -613,6 +613,7 @@ public:
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT RelayMsgToShellView(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); LRESULT RelayMsgToShellView(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnSysColorChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
LRESULT OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); LRESULT OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
LRESULT OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); LRESULT OnFolderOptions(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
LRESULT OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); LRESULT OnMapNetworkDrive(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
@ -664,6 +665,7 @@ public:
MESSAGE_HANDLER(WM_DRAWITEM, RelayMsgToShellView) MESSAGE_HANDLER(WM_DRAWITEM, RelayMsgToShellView)
MESSAGE_HANDLER(WM_MENUSELECT, RelayMsgToShellView) MESSAGE_HANDLER(WM_MENUSELECT, RelayMsgToShellView)
MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange) MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
MESSAGE_HANDLER(WM_SYSCOLORCHANGE, OnSysColorChange)
COMMAND_ID_HANDLER(IDM_FILE_CLOSE, OnClose) COMMAND_ID_HANDLER(IDM_FILE_CLOSE, OnClose)
COMMAND_ID_HANDLER(IDM_TOOLS_FOLDEROPTIONS, OnFolderOptions) COMMAND_ID_HANDLER(IDM_TOOLS_FOLDEROPTIONS, OnFolderOptions)
COMMAND_ID_HANDLER(IDM_TOOLS_MAPNETWORKDRIVE, OnMapNetworkDrive) COMMAND_ID_HANDLER(IDM_TOOLS_MAPNETWORKDRIVE, OnMapNetworkDrive)
@ -3796,6 +3798,12 @@ LRESULT CShellBrowser::OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam,
return 0; return 0;
} }
LRESULT CShellBrowser::OnSysColorChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
{
SHPropagateMessage(m_hWnd, uMsg, wParam, lParam, TRUE);
return 0;
}
LRESULT CShellBrowser::OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled) LRESULT CShellBrowser::OnClose(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled)
{ {
return SendMessage(WM_CLOSE); return SendMessage(WM_CLOSE);

View file

@ -2548,10 +2548,15 @@ REBAR_InsertBandT(REBAR_INFO *infoPtr, INT iIndex, const REBARBANDINFOW *lprbbi,
/* initialize band */ /* initialize band */
memset(lpBand, 0, sizeof(*lpBand)); memset(lpBand, 0, sizeof(*lpBand));
#ifdef __REACTOS__
lpBand->clrFore = infoPtr->clrText == CLR_NONE ? CLR_DEFAULT : infoPtr->clrText;
lpBand->clrBack = infoPtr->clrBk == CLR_NONE ? CLR_DEFAULT : infoPtr->clrBk;
#else
lpBand->clrFore = infoPtr->clrText == CLR_NONE ? infoPtr->clrBtnText : lpBand->clrFore = infoPtr->clrText == CLR_NONE ? infoPtr->clrBtnText :
infoPtr->clrText; infoPtr->clrText;
lpBand->clrBack = infoPtr->clrBk == CLR_NONE ? infoPtr->clrBtnFace : lpBand->clrBack = infoPtr->clrBk == CLR_NONE ? infoPtr->clrBtnFace :
infoPtr->clrBk; infoPtr->clrBk;
#endif
lpBand->iImage = -1; lpBand->iImage = -1;
REBAR_CommonSetupBand(infoPtr->hwndSelf, lprbbi, lpBand); REBAR_CommonSetupBand(infoPtr->hwndSelf, lprbbi, lpBand);

View file

@ -212,6 +212,11 @@ static UINT CalculateCharWidth(HWND hwnd)
return ret; return ret;
} }
static inline COLORREF GetViewColor(COLORREF Clr, UINT SysFallback)
{
return Clr != CLR_INVALID ? Clr : GetSysColor(SysFallback);
}
class CDefView : class CDefView :
public CWindowImpl<CDefView, CWindow, CControlWinTraits>, public CWindowImpl<CDefView, CWindow, CControlWinTraits>,
public CComObjectRootEx<CComMultiThreadModelNoCS>, public CComObjectRootEx<CComMultiThreadModelNoCS>,
@ -592,8 +597,8 @@ CDefView::CDefView() :
ZeroMemory(&m_FolderSettings, sizeof(m_FolderSettings)); ZeroMemory(&m_FolderSettings, sizeof(m_FolderSettings));
ZeroMemory(&m_ptLastMousePos, sizeof(m_ptLastMousePos)); ZeroMemory(&m_ptLastMousePos, sizeof(m_ptLastMousePos));
ZeroMemory(&m_Category, sizeof(m_Category)); ZeroMemory(&m_Category, sizeof(m_Category));
m_viewinfo_data.clrText = GetSysColor(COLOR_WINDOWTEXT); m_viewinfo_data.clrText = CLR_INVALID;
m_viewinfo_data.clrTextBack = GetSysColor(COLOR_WINDOW); m_viewinfo_data.clrTextBack = CLR_INVALID;
m_viewinfo_data.hbmBack = NULL; m_viewinfo_data.hbmBack = NULL;
m_sortInfo.Reset(); m_sortInfo.Reset();
@ -934,18 +939,8 @@ void CDefView::UpdateListColors()
} }
else else
{ {
// text background color m_ListView.SetTextBkColor(GetViewColor(m_viewinfo_data.clrTextBack, COLOR_WINDOW));
COLORREF clrTextBack = m_viewinfo_data.clrTextBack; m_ListView.SetTextColor(GetViewColor(m_viewinfo_data.clrText, COLOR_WINDOWTEXT));
m_ListView.SetTextBkColor(clrTextBack);
// text color
COLORREF clrText;
if (m_viewinfo_data.clrText != CLR_INVALID)
clrText = m_viewinfo_data.clrText;
else
clrText = GetSysColor(COLOR_WINDOWTEXT);
m_ListView.SetTextColor(clrText);
// Background is painted by the parent via WM_PRINTCLIENT // Background is painted by the parent via WM_PRINTCLIENT
m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTBKGND, LVS_EX_TRANSPARENTBKGND); m_ListView.SetExtendedListViewStyle(LVS_EX_TRANSPARENTBKGND, LVS_EX_TRANSPARENTBKGND);
@ -1663,7 +1658,7 @@ LRESULT CDefView::OnPrintClient(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &b
} }
else else
{ {
FillRect(hDC, &rc, GetSysColorBrush(COLOR_WINDOW)); SHFillRectClr(hDC, &rc, GetViewColor(m_viewinfo_data.clrTextBack, COLOR_WINDOW));
} }
bHandled = TRUE; bHandled = TRUE;

View file

@ -129,6 +129,7 @@ static INT_PTR ConfirmMsgBox_Paint(HWND hDlg)
BeginPaint(hDlg, &ps); BeginPaint(hDlg, &ps);
hdc = ps.hdc; hdc = ps.hdc;
SetBkMode(hdc, TRANSPARENT); SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, GetSysColor(COLOR_BTNTEXT));
GetClientRect(GetDlgItem(hDlg, IDC_YESTOALL_MESSAGE), &r); GetClientRect(GetDlgItem(hDlg, IDC_YESTOALL_MESSAGE), &r);
/* this will remap the rect to dialog coords */ /* this will remap the rect to dialog coords */