From cbad6cef24c2bd9af8334e77e1421fda79287f52 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Fri, 15 Mar 2024 21:25:53 +0900 Subject: [PATCH] [SHLWAPI] Implement SHSetDefaultDialogFont (#6620) Implementing missing features... JIRA issue: CORE-19278 - Implement SHSetDefaultDialogFont function. - Add SHSetDefaultDialogFont prototype to . --- dll/win32/shlwapi/ordinal.c | 42 +++++++++++++++++++++++++++++ sdk/include/reactos/shlwapi_undoc.h | 1 + 2 files changed, 43 insertions(+) diff --git a/dll/win32/shlwapi/ordinal.c b/dll/win32/shlwapi/ordinal.c index bd25ca1144b..5b800df18b2 100644 --- a/dll/win32/shlwapi/ordinal.c +++ b/dll/win32/shlwapi/ordinal.c @@ -2440,13 +2440,55 @@ HRESULT WINAPI QISearch( * id [I] Index of child Window to set the Font * * RETURNS +#ifdef __REACTOS__ + * VOID +#else * Success: S_OK +#endif * */ +#ifdef __REACTOS__ +VOID WINAPI SHSetDefaultDialogFont(HWND hWnd, INT id) +#else HRESULT WINAPI SHSetDefaultDialogFont(HWND hWnd, INT id) +#endif { +#ifdef __REACTOS__ + HFONT hOldFont, hNewFont; + LOGFONTW lfOldFont, lfNewFont; + HWND hwndItem; + + TRACE("(%p, %d)\n", hWnd, id); + + hOldFont = (HFONT)SendMessageW(hWnd, WM_GETFONT, 0, 0); + GetObjectW(hOldFont, sizeof(lfOldFont), &lfOldFont); + SystemParametersInfoW(SPI_GETICONTITLELOGFONT, sizeof(lfNewFont), &lfNewFont, 0); + + if (lfOldFont.lfCharSet == lfNewFont.lfCharSet) + return; + + hNewFont = GetPropW(hWnd, L"PropDlgFont"); + if (!hNewFont) + { + /* Create the icon-title font of the same height */ + lfNewFont.lfHeight = lfOldFont.lfHeight; + hNewFont = CreateFontIndirectW(&lfNewFont); + + /* If creating the font is failed, then keep the old font */ + if (!hNewFont) + hNewFont = hOldFont; + + /* Set "PropDlgFont" property if the font is changed */ + if (hOldFont != hNewFont) + SetPropW(hWnd, L"PropDlgFont", hNewFont); + } + + hwndItem = GetDlgItem(hWnd, id); + SendMessageW(hwndItem, WM_SETFONT, (WPARAM)hNewFont, 0); +#else FIXME("(%p, %d) stub\n", hWnd, id); return S_OK; +#endif } /************************************************************************* diff --git a/sdk/include/reactos/shlwapi_undoc.h b/sdk/include/reactos/shlwapi_undoc.h index 746284d2cb4..1f37c8a8b01 100644 --- a/sdk/include/reactos/shlwapi_undoc.h +++ b/sdk/include/reactos/shlwapi_undoc.h @@ -80,6 +80,7 @@ HRESULT WINAPI MayExecForward(IUnknown* lpUnknown, INT iUnk, REFGUID pguidCmdGro HRESULT WINAPI IsQSForward(REFGUID pguidCmdGroup,ULONG cCmds, OLECMD *prgCmds); BOOL WINAPI SHIsChildOrSelf(HWND hParent, HWND hChild); HRESULT WINAPI SHForwardContextMenuMsg(IUnknown* pUnk, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* pResult, BOOL useIContextMenu2); +VOID WINAPI SHSetDefaultDialogFont(HWND hWnd, INT id); HRESULT WINAPI SHRegGetCLSIDKeyW(REFGUID guid, LPCWSTR lpszValue, BOOL bUseHKCU, BOOL bCreate, PHKEY phKey);