시스템 트레이에 텍스트를 표시하는 아이콘을 만들려고합니다. 이 코드투명도가있는 32 비트 트레이 아이콘을 어떻게 만듭니 까? (GDI 사용)?
#include <tchar.h>
#include <Windows.h>
#include <Windowsx.h>
static HICON CreateIcon(LPCTSTR txt) {
HICON hIcon = NULL;
HDC hDC = NULL; {
HDC hDCScreen = GetDC(NULL);
if (hDCScreen != NULL) {
__try { hDC = CreateCompatibleDC(hDCScreen); }
__finally { ReleaseDC(NULL, hDCScreen); }
}
}
if (hDC != NULL) {
__try {
HFONT hFont = CreateFontIndirect(&ncm.lfMessageFont);
if (hFont != NULL) {
__try { SelectFont(hDC, hFont); }
__finally { DeleteFont(hFont); }
}
int width = GetSystemMetrics(SM_CXSMICON),
height = GetSystemMetrics(SM_CYSMICON);
HBITMAP hBmp = CreateCompatibleBitmap(hDC, width, height);
if (hBmp != NULL) {
__try {
HBITMAP hMonoBmp =
CreateCompatibleBitmap(hDC, width, height);
if (hMonoBmp != NULL) {
__try {
RECT rect = { 0, 0, width, height };
HGDIOBJ prev = SelectObject(hDC, hBmp);
__try {
SetBkMode(hDC, TRANSPARENT);
SetTextColor(hDC, RGB(255, 255, 255));
ICONINFO ii = { TRUE, 0, 0, hMonoBmp, hBmp };
int textHeight =
DrawText(hDC, txt, _tcslen(txt), &rect, 0);
if (textHeight != 0) {
hIcon = CreateIconIndirect(&ii);
}
} __finally { SelectObject(hDC, prev); }
} __finally { DeleteObject(hMonoBmp); }
}
} __finally { DeleteObject(hBmp); }
}
} __finally { DeleteDC(hDC); }
}
return hIcon;
}
: 지금까지 해봤
을 (. 물론, 그것은 문자의 몇 가지 이상되지 않습니다)
static void _tmain(int argc, TCHAR* argv[]) {
HICON hIcon = CreateIcon(_T("Hi"));
if (hIcon != NULL) {
__try {
NOTIFYICONDATA nid = { sizeof(nid) };
nid.hWnd = GetConsoleWindow();
BOOL success = Shell_NotifyIcon(NIM_ADD, &nid);
if (success) {
nid.uFlags = NIF_ICON;
nid.hIcon = hIcon;
success = Shell_NotifyIcon(NIM_MODIFY, &nid);
}
} __finally { DestroyIcon(hIcon); }
}
}
하지만 내가 가진 전부입니다 검정색 바탕에 흰색 텍스트의 Hi
이라고하는 단색 비트 맵. (RGB(255, 255, 255)
을 약간 변경하더라도 RGB(255, 255, 254)
라고하면 흑백입니다.
아이디어가 있으십니까?
(* 참고 : 저는 MFC, ATL, 또는 다른 라이브러리 솔루션을 찾고하지해요, 단지는 Win32/GDI 호출합니다.)
편집 : 여기
무엇을의
하는 것으로, 그리고는 "시스템 트레이"라고 한 적이있다 :
코드 예는 여기에 제공됩니다. 작업 표시 줄 ** 알림 영역 **입니다. –
@Cody : 예, [왜 두 개의 음절을 사용합니까?] (http://support.microsoft.com/kb/162613) 9시를 할 때? – Mehrdad
불행히도 영어에서는 음절의 수와 편의성이 문구의 정확성을 결정하는 주요 요인이 아닙니다. 이 영역을 알림 영역이라고합니다. [Raymond Chen의 블로그 기사] (http://blogs.msdn.com/b/oldnewthing/archive/2003/09/10/54831.aspx)는 관례적인 참고 자료입니다. 관련 기능이 "알림 아이콘"을 참조하는 이유를 궁금해 본 적이 있습니까? 예, 정확하지 않은 제목의 지식 기반 기사를 발견했습니다. 그 중 많은 것들이 존재합니다. 거기에 단순히 잘못된 정보와 함께, 특히 그것은 VB에 대한 기사에 관한 몇 가지 있습니다. –