1.定义消息
#define WM_RMENU_CMD_TEST_1 WM_USER + 202
#define WM_RMENU_CMD_TEST_2 WM_USER + 203
#define WM_RMENU_CMD_TEST_3 WM_USER + 204
2.定义消息函数
//
ON_WM_RBUTTONDOWN()
//
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
3.消息函数实现
void CProductModeling::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING, WM_RMENU_CMD_TEST_1, "Test 1");
menu.AppendMenu(MF_STRING, WM_RMENU_CMD_TEST_1, "Test 2");
menu.AppendMenu(MF_STRING, WM_RMENU_CMD_TEST_1, "Test 3");
POINT tpoint;
tpoint.x = point.x;
tpoint.y = point.y;
ClientToScreen(&tpoint);
menu.TrackPopupMenu(TPM_LEFTALIGN, tpoint.x, tpoint.y, this);
CDialog::OnRButtonDown(nFlags, point);
}
4.重载命令消息函数
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
BOOL CProductModeling::OnCommand(WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
case WM_RMENU_CMD_TEST_1:
AfxMessageBox("Test_1");
break;
case WM_RMENU_CMD_TEST_2:
AfxMessageBox("Test_2");
break;
case WM_RMENU_CMD_TEST_3:
AfxMessageBox("Test_3");
break;
default:
break;
}
return CDialog::OnCommand(wParam, lParam);
}