A:静态创建菜单
步骤:
一、在资源中插入菜单资源(ID为:IDR_MENU1):
二、添加右键单击处理函数OnRButtonDown,函数代码为:
void CaaDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu menu;
CMenu* pPopupMenu;
menu.LoadMenu(IDR_MENU1);
pPopupMenu=menu.GetSubMenu(0);
//方法一
// ClientToScreen(&point);
// pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_TOPALIGN,point.x,point.y,this,NULL);
//方法二
CPoint pointA;
::GetCursorPos(&pointA);
pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_TOPALIGN,pointA.x,pointA.y,this,NULL);
CDialogEx::OnRButtonDown(nFlags, point);
}
B:动态创建菜单
一:在Resource.h头文件中定义资源ID。如:
#define IDC_SHOW 1026
#define IDC_EXIT 1027
二:在右键响应函数中添加代码:
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);//得到鼠标位置
CMenu menu;
menu.CreatePopupMenu();//声明一个弹出式菜单
menu.AppendMenu(MF_STRING,IDC_SHOW,"显示");
menu.AppendMenu(MF_STRING,IDC_EXIT,"退出");
//确定弹出式菜单的位置
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
//资源回收
HMENU hmenu=menu.Detach();
menu.DestroyMenu();
delete lpoint;
运行结果:
三、如果要为显示、退出按钮添加单击响应函数,需要将响应函数和ID关联。
函数声明与实现:
afx_msg void OnShow();
void CDeskClockDlg::OnShow()
{
this->ShowWindow(SW_SHOW);
}
在消息映射宏添加关联:
BEGIN_MESSAGE_MAP
ON_BN_CLICKED(IDC_SHOW, OnShow)
END_MESSAGE_MAP