#include <windows.h>
#include <wchar.h>
#include <strsafe.h>
#define WM_NOTIFYICON (WM_USER + 1)
HMENU hmenuRoot = NULL;
NOTIFYICONDATA nid;
const TCHAR szAppName[] = TEXT("MyWindows");
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
POINT point;
switch(message) {
case WM_CREATE:
hmenuRoot = CreateMenu();
HMENU hmenuPopup = CreatePopupMenu();
AppendMenu(hmenuPopup, MF_STRING, 1, TEXT("A"));
AppendMenu(hmenuPopup, MF_STRING, 2, TEXT("B"));
AppendMenu(hmenuPopup, MF_STRING, 3, TEXT("C"));
AppendMenu(hmenuRoot, MF_POPUP, (UINT_PTR)hmenuPopup, TEXT("MA"));
SetMenu(hwnd, hmenuRoot);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case 1:
if(nid.cbSize == sizeof(nid)) {
DestroyIcon(nid.hIcon);
}
ZeroMemory(&nid, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = hwnd;
nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
nid.hIcon = LoadIcon(NULL, IDI_APPLICATION);
StringCchCopy(nid.szTip, sizeof(nid.szTip), szAppName);
nid.uCallbackMessage = WM_NOTIFYICON;
Shell_NotifyIcon(NIM_ADD, &nid);
return 0;
case 2:
Shell_NotifyIcon(NIM_DELETE, &nid);
nid.cbSize = 0;
return 0;
case 3:
GetCursorPos(&point);
TrackPopupMenu(GetSubMenu(hmenuRoot, 0), TPM_BOTTOMALIGN | TPM_RIGHTALIGN, point.x, point.y, 0, hwnd, NULL);
return 0;
}
break;
case WM_NOTIFYICON:
switch(lParam) {
case WM_LBUTTONDOWN:
GetCursorPos(&point);
TrackPopupMenu(GetSubMenu(hmenuRoot, 0), TPM_BOTTOMALIGN | TPM_RIGHTALIGN, point.x, point.y, 0, hwnd, NULL);
return 0;
case WM_RBUTTONDOWN:
MessageBox(NULL, "R", "标题", MB_OK);
return 0;
}
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, TEXT("大家好,这是我的第一个窗口程序!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
case WM_DESTROY:
SendMessage(hwnd, WM_COMMAND, 2, 0);
DestroyMenu(hmenuRoot);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
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.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if(!RegisterClass(&wndclass)) {
MessageBox(NULL, TEXT("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(szAppName, TEXT("鱼C工作室"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}