vc++ 弹出式菜单的创建和响应函数

本文介绍如何在对话框中实现弹出式菜单,包括通过加载菜单资源和自定义创建菜单两种方式,并展示了如何响应菜单选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

弹出式菜单其实也是一种菜单,只不过每一个菜单子项是弹出式的。

制作过程

1 新建一个对话框。

2 添加菜单资源  资源ID: IDR_MENU1  菜单以弹出式显示(view as  popup)

 

3 响应鼠标右击或者响应WM_CONTEXTMENU消息

  void CDemo5Dlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
 // TODO: Add your message handler code here
 CMenu menu;
 menu.LoadMenu(IDR_MENU1);
 CMenu * popup= menu.GetSubMenu(0);  //0是指IDR_MENU1中第0列菜单。可以随便取一项菜单,编号0~n
 popup->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);

}

或者自主添加菜单项

///自己创建菜单项

void CDemo5Dlg::OnContextMenu(CWnd* pWnd, CPoint point)

{

       // TODO: Add your message handler code here

       CMenu menuPopup;

       if(menuPopup.CreatePopupMenu())

       {

              menuPopup.AppendMenu(MF_STRING,ID_FILE_SAVE,"保存文件/tCtrl+S");

              menuPopup.AppendMenu(MF_STRING,ID_FILE_PRINT,"打印文件/tCtrl+P");

              menuPopup.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);

       }

4 响应弹出式菜单

 在.h文件中添加

afx_msg void OnPopup1();
afx_msg void OnPopup2();
afx_msg void OnPopup3();
在cpp文件中添加消息映射

 ON_COMMAND(ID_SUBMENU1, OnPopup1)  //菜单1 ID
 ON_COMMAND(ID_SUBMENU2, OnPopup2) //菜单2  ID
 ON_COMMAND(ID_SUBMENU3, OnPopup3)

编写函数

 

void CDemo5Dlg::OnPopup1()
{
 MessageBox("你点击了菜单1");
}
void CDemo5Dlg::OnPopup2()
{
 MessageBox("你点击了菜单2");
}
void CDemo5Dlg::OnPopup3()
{
 MessageBox("你点击了菜单3");
}
也可以直接重写ONCommand函数

BOOL CDemo5Dlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
 // TODO: Add your specialized code here and/or call the base class
 int menuID = LOWORD(wParam);
 switch(menuID)
 {
  case ID_SUBMENU1:
       AfxMessageBox("111");
       break;
  case ID_SUBMENU2:
      AfxMessageBox("222");
      break;
  default:
      break;
 }
 return CDialog::OnCommand(wParam, lParam); 
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值