3.06 上下文菜单
显示上下文菜单
BOOL TrackPopupMenu(
HMENU hMenu, //菜单句柄UINT
uFlags, //显示方式intX, //水平位置,屏幕坐标系
inty, //垂直位置,屏幕坐标系
int nReserved, //保留,必须0
HWND hWnd, //处理菜单消息的窗口句柄
CONST RECT*prcRect //NULL,忽略
); TrackPopupMenu是阻塞函数
在 WM_RBUTTONUP 构建
void OnRButtonUp(HWND hWnd, LPARAM lParam) {
HMENU hMain = LoadMenu(GetModuleHandle(NULL), (char*)IDR_MENU1); // 获取菜单句柄
HMENU hPopup = GetSubMenu(hMain,0); // 获取第一个子菜单
// 获取屏幕坐标
POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
ClientToScreen(hWnd, &pt);
// 构建菜单
TrackPopupMenu(
hPopup,
TPM_CENTERALIGN | TPM_VCENTERALIGN,
pt.x, pt.y,
0,
hWnd,
NULL
);
}
在 WM_CONTEXTMENU 构建
- WParam:右键点击的窗口句柄
- lParam:
- LOWORD X 坐标,屏幕坐标系
- HIWORD Y 坐标,屏幕坐标系
WM_CONTEXTMENU 消息是在 WM_RBUTTONUP 消息之后产生。
void OnContextMenu(HWND hWnd, LPARAM lParam) {
HMENU hMain = LoadMenu(GetModuleHandle(NULL), (char*)IDR_MENU1); // 获取菜单句柄
HMENU hPopup = GetSubMenu(hMain,0); // 获取第一个子菜单
TrackPopupMenu(
hPopup,
TPM_CENTERALIGN | TPM_VCENTERALIGN,
LOWORD(lParam), HIWORD(lParam),
0,
hWnd,
NULL
);
}