From 0f6c074a856804e1ad0558d472d327740c25d292 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Thu, 30 Oct 2008 09:41:37 +0000 Subject: [PATCH] - Add getting system font and icon size settings - Other small changes svn path=/trunk/; revision=37085 --- reactos/base/applications/kbswitch/kbswitch.c | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/reactos/base/applications/kbswitch/kbswitch.c b/reactos/base/applications/kbswitch/kbswitch.c index b173e139bc3..5521b61a60a 100644 --- a/reactos/base/applications/kbswitch/kbswitch.c +++ b/reactos/base/applications/kbswitch/kbswitch.c @@ -24,6 +24,8 @@ HINSTANCE hInst; HANDLE hProcessHeap; HMODULE hDllLib; ULONG ulCurrentLayoutNum = 1; +UINT cxSmIcon, cySmIcon; + static HICON CreateTrayIcon(LPTSTR szLCID) @@ -49,18 +51,18 @@ CreateTrayIcon(LPTSTR szLCID) hdcsrc = GetDC(NULL); hdc = CreateCompatibleDC(hdcsrc); - hBitmap = CreateCompatibleBitmap(hdcsrc, 16, 16); + hBitmap = CreateCompatibleBitmap(hdcsrc, cxSmIcon, cySmIcon); ReleaseDC(NULL, hdcsrc); if (hdc && hBitmap) { - hBmpNew = CreateBitmap(16, 16, 1, 1, NULL); + hBmpNew = CreateBitmap(cxSmIcon, cySmIcon, 1, 1, NULL); if (hBmpNew) { hBmpOld = SelectObject(hdc, hBitmap); - rect.right = 16; + rect.right = cxSmIcon; rect.left = 0; - rect.bottom = 16; + rect.bottom = cySmIcon; rect.top = 0; bkColor = SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT)); @@ -68,14 +70,14 @@ CreateTrayIcon(LPTSTR szLCID) ExtTextOut(hdc, rect.left, rect.top, ETO_OPAQUE, &rect, _T(""), 0, NULL); - hFont = CreateFont(-11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, - OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, FF_DONTCARE, _T("Tahoma")); + hFont = (HFONT) GetStockObject(DEFAULT_GUI_FONT); + if (!hFont) + goto End; hFontOld = SelectObject(hdc, hFont); DrawText(hdc, _tcsupr(szBuf), 2, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER); SelectObject(hdc, hBmpNew); - PatBlt(hdc, 0, 0, 16, 16, BLACKNESS); + PatBlt(hdc, 0, 0, cxSmIcon, cySmIcon, BLACKNESS); SelectObject(hdc, hBmpOld); SelectObject(hdc, hFontOld); @@ -84,15 +86,15 @@ CreateTrayIcon(LPTSTR szLCID) IconInfo.fIcon = TRUE; hIcon = CreateIconIndirect(&IconInfo); - - DeleteObject(hBmpNew); - DeleteObject(hBmpOld); - DeleteObject(hFont); +End: + if (hBmpNew) DeleteObject(hBmpNew); + if (hBmpOld) DeleteObject(hBmpOld); + if (hFont) DeleteObject(hFont); } } - DeleteDC(hdc); - DeleteObject(hBitmap); + if (hdc) DeleteDC(hdc); + if (hBitmap) DeleteObject(hBitmap); return hIcon; } @@ -384,6 +386,23 @@ GetNextLayout() return -1; } +static VOID +SettingsChanging(HWND hwnd) +{ + UINT cxSmIconCur = 0, cySmIconCur = 0; + + cxSmIconCur = GetSystemMetrics(SM_CXSMICON); + cySmIconCur = GetSystemMetrics(SM_CYSMICON); + + if ((cxSmIcon != cxSmIconCur) || (cySmIcon != cySmIconCur)) + { + cxSmIcon = cxSmIconCur; + cySmIcon = cySmIconCur; + } + + ActivateLayout(hwnd, ulCurrentLayoutNum); +} + LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { @@ -394,6 +413,9 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { case WM_CREATE: { + cxSmIcon = GetSystemMetrics(SM_CXSMICON); + cySmIcon = GetSystemMetrics(SM_CYSMICON); + SetHooks(); AddTrayIcon(hwnd); hRightPopupMenu = GetSubMenu(LoadMenu(hInst, MAKEINTRESOURCE(IDR_POPUP)), 0); @@ -489,6 +511,8 @@ WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) case WM_SETTINGCHANGE: { + SettingsChanging(hwnd); + if (wParam == SPI_SETDEFAULTINPUTLANG) { //FIXME: Should detect default language changes by CPL applet or by other tools and update UI