|
发表于 2021-11-9 20:31:39
|
显示全部楼层
本楼为最佳答案
本帖最后由 人造人 于 2021-11-9 20:33 编辑
- #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;
- }
复制代码 |
|