关闭

右键弹出菜单

41人阅读 评论(0) 收藏 举报

算法:

第一步:增加组件

组件和控件:

Project / Add to project / Components and controls

选择VC++ components里面的Pop-up Menu;

选择CMenuView下面的

CG_IDR_POPUP_MENU_VIEW

这个是ID号,你可以修改的;

在资源里面会增加一个菜单,只有一个子菜单abc(名字随便,不显示的)

编辑子菜单项:显示IDM_SHOW,退出IDM_EXIT

★注意:用下面这个函数可以手动创建弹出菜单:

CMenu::TrackPopupMenu

BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL );

第二步:在View中添加WM_RBUTTONDOWN消息对应函数

void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)

{

      // TODO: Add your message handler code here and/or call default

     

      CView::OnRButtonDown(nFlags, point);

}

第三步:编写响应函数中的程序;

     S1:加载弹出菜单;

            CMenu menu;

             menu.LoadMenu(IDR_MENU1);

     S2:获得索引号为0的子菜单指针;

          CMenu *pPopup=menu.GetSubMenu(0);

     S3:转换坐标系,从客户区坐标到屏幕坐标的转换;

      ClientToScreen(&point);

     S4:弹出菜单

      pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);

     S5:结束

 

★其中this表示view,那么view类能响应菜单命令;如果想mainframe来响应菜单命令,则this改为GetParent();

 

 

★完整菜单如下:

void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)

{

      // TODO: Add your message handler code here and/or call default

      //S1:加载弹出菜单

      CMenu menu;

      menu.LoadMenu(IDR_MENU1);

 

      //S2:获得索引号为0的子菜单,在本例子里就一个;

      CMenu *pPopup=menu.GetSubMenu(0);

 

      //S3:转换坐标系,从客户区坐标到屏幕坐标的转换;

      ClientToScreen(&point);

 

      //S4:弹出菜单

      pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);

 

      CView::OnRButtonDown(nFlags, point);

}

 

为显示和退出子菜单项增加命令响应函数,方法和以前一样,此处略讲;

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3349次
    • 积分:113
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条
    文章存档