CMenu

CMenu(菜单)

下面我们来实现几种样式的菜单:

样式1:在菜单栏上添加菜单(普通菜单),并添加消息响应

样式2check菜单(对号)

样式3:位图菜单(替代文字)

样式4:位图标记的check菜单

样式5:右键菜单

样式6:动态添加菜单

 

别看有那么多,其实很简单,下面我们分别来实现:

样式1菜单:

在资源视图的MENU资源上打开资源,在后面添加一个菜单项即可,你懂的

然后在该菜单项上右键选择“添加事件处理程序”(VS2010),选择COMMAND消息即可

就这样,样式1搞定

 

样式2菜单:

 

和样式1一样,然后添加两个消息:command消息和update_command_ui消息:

如下处理:

void CMainFrame::OnPopularmenu()

{

         // TODO: 在此添加命令处理程序代码

          m_bCheckPopMenu=!m_bCheckPopMenu;

          MessageBox("普通按钮单击");

}

 

 

void CMainFrame::OnUpdatePopularmenu(CCmdUI *pCmdUI)

{

         // TODO: 在此添加命令更新用户界面处理程序代码

         pCmdUI->SetCheck(m_bCheckPopMenu);

}

 

好了,样式2搞定。

 

样式3:菜单:

当然先要添加一个菜单

添加变量:

CBitmap m_bitmap;

 

OnCreate消息里处理创建:

 

m_bitmap.LoadBitmap(IDB_BITMAP2);          //加载位图

CMenu *pMenu = GetMenu();                           //获得菜单指针

         //修改“位图菜单”->“菜单一”为位图菜单

         pMenu->GetSubMenu(5)->ModifyMenu(ID_BMPMENU_BMPMENU, MF_BYCOMMAND,ID_BMPMENU_BMPMENU, &m_bitmap);//这里的5是我自己的按钮在菜单//资源上的项序号,从0开始。

搞定。

 

 

样式4菜单:

先添加一个菜单

添加变量:

CBitmap m_bitmap1;

CBitmap m_bitmap2

 

OnCreate消息里处理创建:

m_bitmap1.LoadBitmap(IDB_BITMAP2);       //加载位图

m_bitmap2.LoadBitmap(IDB_BITMAP3);

CMenu *pMenu = GetMenu();                           //获得菜单指针

 

pMenu->GetSubMenu(5)->SetMenuItemBitmaps(1,MF_BYPOSITION,&m_bitmap1,&m_bitmap2);

 

好了,现在处理消息:

和上面一样,添加两个消息:(commandupdate_command_ui消息):

void CMainFrame::OnBmpmenuBmpmenu2()

{

         // TODO: 在此添加命令处理程序代码

          m_bCheckMenuClick=!m_bCheckMenuClick;

         MessageBox("位图菜单2单击!");

          

}

 

 

void CMainFrame::OnUpdateBmpmenuBmpmenu2(CCmdUI *pCmdUI)

{

         // TODO: 在此添加命令更新用户界面处理程序代码

         pCmdUI->SetText("bmp menu");

         pCmdUI->SetCheck(m_bCheckMenuClick);

 

          

}

 

又搞定了。

 

样式5菜单:

 

先在view类添加消息:WM_RBUTTONUP:

 

void CMyView::OnRButtonUp(UINT nFlags, CPoint point)

{

         // TODO: 在此添加消息处理程序代码和/或调用默认值

         //MessageBox("OnLButtonUp");

 

         static BOOL IsLoad=TRUE;

         if (IsLoad)

         {

                   m_PopMenu.LoadMenu(MAKEINTRESOURCE(IDR_MENU1));

         }

         IsLoad=FALSE;

         CRect rect;

         rect.left=point.x;

         rect.top=point.y;

        

         ClientToScreen(&rect);

         m_PopMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN,rect.left,rect.top,this,NULL);

 

         CView::OnLButtonUp(nFlags, point);

}

 

又搞定了。

 

样式6菜单:

首先我们要打开资源视图,在字符串表中添加一个字符串ID为:IDM_ACTION

 

然后我们添加一个消息:WM_RBUTTONUP:

void CMyView::OnRButtonUp(UINT nFlags, CPoint point)

{

        

         // TODO: 在此添加消息处理程序代码和/或调用默认值

         static BOOL lb_Check=FALSE;

         if (lb_Check==FALSE)

         {

        

         CMenu *pMenu = AfxGetMainWnd()->GetMenu();                                                                                            //得到主框架菜单

         //pMenu->GetSubMenu(2)->AppendMenu(MF_SEPARATOR);                                                                                   //添加菜单分隔符

         pMenu->GetSubMenu(2)->AppendMenu(MF_STRING, IDM_ACTION_MENU, "动态菜单(&A)");        //添加菜单

         MessageBox("添加菜单到“查看”菜单下成功", "信息提示", MB_OK);                                      //提示信息

         }

 

         if (lb_Check==TRUE)

         {

                   CMenu *pMenu = AfxGetMainWnd()->GetMenu();

                   pMenu->GetSubMenu(2)->DeleteMenu(2,MF_BYPOSITION);

                   MessageBox("删除菜单成功", "信息提示", MB_OK);//提示信息

         }

         lb_Check=!lb_Check;

         CView::OnRButtonUp(nFlags, point);

}

 

Ok,menu is over.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值