mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 09:50:07 +00:00
[KBSWITCH] Refactor CreateTrayIcon
This commit is contained in:
parent
f974f02881
commit
0991cedca7
|
@ -10,6 +10,8 @@
|
||||||
#include "kbswitch.h"
|
#include "kbswitch.h"
|
||||||
|
|
||||||
#define WM_NOTIFYICONMSG (WM_USER + 248)
|
#define WM_NOTIFYICONMSG (WM_USER + 248)
|
||||||
|
#define CX_ICON 16
|
||||||
|
#define CY_ICON 16
|
||||||
|
|
||||||
PKBSWITCHSETHOOKS KbSwitchSetHooks = NULL;
|
PKBSWITCHSETHOOKS KbSwitchSetHooks = NULL;
|
||||||
PKBSWITCHDELETEHOOKS KbSwitchDeleteHooks = NULL;
|
PKBSWITCHDELETEHOOKS KbSwitchDeleteHooks = NULL;
|
||||||
|
@ -30,70 +32,65 @@ ULONG ulCurrentLayoutNum = 1;
|
||||||
static HICON
|
static HICON
|
||||||
CreateTrayIcon(LPTSTR szLCID)
|
CreateTrayIcon(LPTSTR szLCID)
|
||||||
{
|
{
|
||||||
LANGID lId;
|
LANGID LangID;
|
||||||
TCHAR szBuf[3];
|
TCHAR szBuf[3];
|
||||||
HDC hdc, hdcsrc;
|
HDC hdc;
|
||||||
HBITMAP hBitmap, hBmpNew, hBmpOld;
|
HBITMAP hbmColor, hbmMono, hBmpOld;
|
||||||
RECT rect;
|
RECT rect;
|
||||||
HFONT hFontOld, hFont = NULL;
|
HFONT hFontOld, hFont = NULL;
|
||||||
ICONINFO IconInfo;
|
ICONINFO IconInfo;
|
||||||
HICON hIcon = NULL;
|
HICON hIcon = NULL;
|
||||||
|
LOGFONT lf;
|
||||||
|
|
||||||
lId = (LANGID)_tcstoul(szLCID, NULL, 16);
|
/* Getting "EN", "FR", etc. from English, French, ... */
|
||||||
if (GetLocaleInfo(lId,
|
LangID = (LANGID)_tcstoul(szLCID, NULL, 16);
|
||||||
LOCALE_SISO639LANGNAME,
|
if (!GetLocaleInfo(LangID, LOCALE_SISO639LANGNAME, szBuf, ARRAYSIZE(szBuf)))
|
||||||
szBuf,
|
|
||||||
ARRAYSIZE(szBuf)) == 0)
|
|
||||||
{
|
{
|
||||||
StringCchCopy(szBuf, ARRAYSIZE(szBuf), _T("??"));
|
StringCchCopy(szBuf, ARRAYSIZE(szBuf), _T("??"));
|
||||||
}
|
}
|
||||||
|
CharUpper(szBuf);
|
||||||
|
|
||||||
hdcsrc = GetDC(NULL);
|
/* Create hdc, hbmColor and hbmMono */
|
||||||
hdc = CreateCompatibleDC(hdcsrc);
|
hdc = CreateCompatibleDC(NULL);
|
||||||
hBitmap = CreateCompatibleBitmap(hdcsrc, 16, 16);
|
hbmColor = CreateCompatibleBitmap(hdc, CX_ICON, CY_ICON);
|
||||||
ReleaseDC(NULL, hdcsrc);
|
hbmMono = CreateBitmap(CX_ICON, CY_ICON, 1, 1, NULL);
|
||||||
|
|
||||||
if (hdc && hBitmap)
|
/* Create a font */
|
||||||
{
|
ZeroMemory(&lf, sizeof(lf));
|
||||||
hBmpNew = CreateBitmap(16, 16, 1, 1, NULL);
|
lf.lfHeight = -11;
|
||||||
if (hBmpNew)
|
lf.lfCharSet = ANSI_CHARSET;
|
||||||
{
|
lstrcpyn(lf.lfFaceName, _T("Tahoma"), ARRAYSIZE(lf.lfFaceName));
|
||||||
hBmpOld = SelectObject(hdc, hBitmap);
|
hFont = CreateFontIndirect(&lf);
|
||||||
rect.right = 16;
|
|
||||||
rect.left = 0;
|
|
||||||
rect.bottom = 16;
|
|
||||||
rect.top = 0;
|
|
||||||
|
|
||||||
SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
|
SetRect(&rect, 0, 0, CX_ICON, CY_ICON);
|
||||||
SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT));
|
|
||||||
|
|
||||||
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"));
|
|
||||||
|
|
||||||
|
/* Draw hbmColor */
|
||||||
|
hBmpOld = SelectObject(hdc, hbmColor);
|
||||||
|
SetDCBrushColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
|
||||||
|
FillRect(hdc, &rect, (HBRUSH)GetStockObject(DC_BRUSH));
|
||||||
hFontOld = SelectObject(hdc, hFont);
|
hFontOld = SelectObject(hdc, hFont);
|
||||||
DrawText(hdc, _tcsupr(szBuf), 2, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER);
|
SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT));
|
||||||
SelectObject(hdc, hBmpNew);
|
SetBkMode(hdc, TRANSPARENT);
|
||||||
PatBlt(hdc, 0, 0, 16, 16, BLACKNESS);
|
DrawText(hdc, szBuf, 2, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
|
||||||
SelectObject(hdc, hBmpOld);
|
|
||||||
SelectObject(hdc, hFontOld);
|
SelectObject(hdc, hFontOld);
|
||||||
|
SelectObject(hdc, hBmpOld);
|
||||||
|
|
||||||
IconInfo.hbmColor = hBitmap;
|
/* Fill hbmMono by black */
|
||||||
IconInfo.hbmMask = hBmpNew;
|
hBmpOld = SelectObject(hdc, hbmMono);
|
||||||
|
PatBlt(hdc, 0, 0, CX_ICON, CY_ICON, BLACKNESS);
|
||||||
|
SelectObject(hdc, hBmpOld);
|
||||||
|
|
||||||
|
/* Create an icon from hbmColor and hbmMono */
|
||||||
|
IconInfo.hbmColor = hbmColor;
|
||||||
|
IconInfo.hbmMask = hbmMono;
|
||||||
IconInfo.fIcon = TRUE;
|
IconInfo.fIcon = TRUE;
|
||||||
|
|
||||||
hIcon = CreateIconIndirect(&IconInfo);
|
hIcon = CreateIconIndirect(&IconInfo);
|
||||||
|
|
||||||
DeleteObject(hBmpNew);
|
/* Clean up */
|
||||||
DeleteObject(hBmpOld);
|
DeleteObject(hbmColor);
|
||||||
|
DeleteObject(hbmMono);
|
||||||
DeleteObject(hFont);
|
DeleteObject(hFont);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DeleteDC(hdc);
|
DeleteDC(hdc);
|
||||||
DeleteObject(hBitmap);
|
|
||||||
|
|
||||||
return hIcon;
|
return hIcon;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue