#include <Windows.h>
#include <ShellAPI.h>
#define NOTIFY_MSG WM_USER + 1000
#define NOTIFY_UID 1000
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
HINSTANCE g_inst = NULL;
int CALLBACK WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
{
g_inst = hInstance;
static TCHAR szAppName[] = TEXT("通知栏") ;
HWND hwnd = NULL;
MSG msg = {0};
WNDCLASS wndclass = {0};
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow( szAppName, // window class name
TEXT ("通知栏"), // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
if (hwnd == NULL)
{
MessageBox (NULL, TEXT ("Fail to Create Window!"), szAppName, MB_OK) ;
return 0;
}
//ShowWindow (hwnd, nShowCmd) ;
//UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc = NULL;
PAINTSTRUCT ps = {0};
RECT rect = {0};
static NOTIFYICONDATA nid = {0};
switch (message)
{
case WM_CREATE:
{
// TODO: 不同版本大小不一样
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.uID = NOTIFY_UID;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.hIcon = ::LoadIcon(g_inst, MAKEINTRESOURCE(IDI_FLAG));
nid.uCallbackMessage = NOTIFY_MSG;
nid.hWnd = hwnd;
strcpy_s(nid.szTip, sizeof(nid.szTip)-1, "通知栏");
Shell_NotifyIcon(NIM_ADD, &nid);
}
return 0;
case NOTIFY_MSG:
{
unsigned int id = (unsigned int)wParam;
unsigned short umsg = LOWORD(lParam);
if (id == NOTIFY_UID)
{
switch (umsg)
{
case WM_RBUTTONDOWN:
{
}
return 0;
default:
return 0;
}
}
}
return 0;
case WM_COMMAND:
{
}
return 0;
case WM_CLOSE:
{
DestroyWindow(hwnd);
}
return 0;
case WM_DESTROY:
{
Shell_NotifyIcon(NIM_DELETE, &nid);
PostQuitMessage(0);
}
return 0;
default:
break;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
通知栏-Shell_NotifyIcon
最新推荐文章于 2024-09-25 15:20:18 发布