TrackPopupMenu 应用示例
时间: 2023-10-29 19:04:30 浏览: 43
当使用 TrackPopupMenu 函数时,我们可以创建一个弹出式菜单,并在指定的窗口位置显示它。以下是一个简单的示例,演示了如何使用 TrackPopupMenu 函数。
```cpp
#include <windows.h>
// 菜单项的标识符
#define IDM_FILE_NEW 1
#define IDM_FILE_OPEN 2
#define IDM_FILE_EXIT 3
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_COMMAND:
{
// 处理菜单项的选择
switch (LOWORD(wParam))
{
case IDM_FILE_NEW:
MessageBox(hwnd, "New File selected!", "Menu", MB_OK);
break;
case IDM_FILE_OPEN:
MessageBox(hwnd, "Open File selected!", "Menu", MB_OK);
break;
case IDM_FILE_EXIT:
DestroyWindow(hwnd);
break;
}
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 创建窗口类
WNDCLASS wc = {0};
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszClassName = "TrackPopupMenuExample";
// 注册窗口类
RegisterClass(&wc);
// 创建窗口
HWND hwnd = CreateWindow("TrackPopupMenuExample", "TrackPopupMenu Example", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInstance, NULL);
// 显示窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 创建弹出式菜单
HMENU hMenu = CreatePopupMenu();
AppendMenu(hMenu, MF_STRING, IDM_FILE_NEW, "New");
AppendMenu(hMenu, MF_STRING, IDM_FILE_OPEN, "Open");
AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
AppendMenu(hMenu, MF_STRING, IDM_FILE_EXIT, "Exit");
// 右键单击时显示弹出式菜单
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if (msg.message == WM_RBUTTONUP)
{
POINT pt;
GetCursorPos(&pt);
TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwnd, NULL);
}
}
// 销毁菜单
DestroyMenu(hMenu);
return msg.wParam;
}
```
在这个示例中,我们创建了一个简单的窗口,并在窗口的右键单击事件中显示了一个弹出式菜单。当用户选择菜单项时,我们使用 MessageBox 函数显示相应的消息框。菜单项的标