TrackPopupMenu 应用示例
时间: 2023-10-29 13:04:30 浏览: 144
当使用 Windows API 中的 `TrackPopupMenu` 函数时,可以创建一个弹出式菜单,并在指定的位置显示它。以下是一个示例代码,展示了如何使用 `TrackPopupMenu` 在窗口中响应右键菜单的点击事件:
```cpp
#include <Windows.h>
// 右键菜单的 ID
#define IDM_EXIT 1001
// 窗口过程函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDM_EXIT:
// 处理退出菜单项的点击事件
PostQuitMessage(0);
break;
}
break;
case WM_DESTROY:
// 关闭窗口
PostQuitMessage(0);
break;
case WM_RBUTTONDOWN:
{
// 创建弹出式菜单
HMENU hPopupMenu = CreatePopupMenu();
AppendMenu(hPopupMenu, MF_STRING, IDM_EXIT, "Exit");
// 获取鼠标点击位置
POINT pt;
GetCursorPos(&pt);
// 显示弹出式菜单
TrackPopupMenu(hPopupMenu, TPM_LEFTALIGN | TPM_TOPALIGN, pt.x, pt.y, 0, hwnd, NULL);
// 销毁菜单
DestroyMenu(hPopupMenu);
}
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 创建窗口类
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = "PopupMenuExample";
RegisterClass(&wc);
// 创建窗口
HWND hwnd = CreateWindow(wc.lpszClassName, "PopupMenu Example", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL);
// 显示窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 消息循环
MSG msg = {};
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
```
上述代码创建了一个简单的窗口,并在窗口的右键菜单中添加了一个 "Exit" 菜单项。当用户右击窗口时,会显示弹出式菜单,点击 "Exit" 菜单项将退出程序。
请注意,此示例是基于 Windows 平台的,使用 C++ 编写。你可以根据自己的需要修改和扩展代码。
阅读全文