通知栏-Shell_NotifyIcon

#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) ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值