右键弹出菜单

来源:互联网 发布:depthmap软件 编辑:程序博客网 时间:2024/06/05 00:30

算法:

第一步:增加组件

组件和控件:

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
原创粉丝点击