码迷,mamicode.com
首页 > 编程语言 > 详细

MFC动态菜单

时间:2016-10-11 21:51:20      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

1.Cmenu3View 键盘获取函数解析

 1 void CMenu3View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
 2 {
 4         CClientDC dc(this);//获取的是view句柄
 5         if(0x0d==nChar)//如果检测到回车键进行一下操作
 6         {
 7              if(0==++m_nIndex)//初始值为-1,说明是第一次回车
 8              { 
 9                  m_menu.CreatePopupMenu();//建立菜单
10              GetParent()->GetMenu()->AppendMenu(MF_POPUP,(UINT)m_menu.m_hMenu/*进行强制转换*/,"PhoneBook");//窗口尺寸变了,才出来,是什么情况?
11              GetParent()->DrawMenuBar();//调用父类进行菜单栏重会
12              }
13              m_menu.AppendMenu(MF_STRING,IDM_PHONE1+m_nIndex/*这里是亮点*/,m_strLine.Left(m_strLine.Find(" ")));
14              m_strArray.Add(m_strLine);
15               m_strLine.Empty();//按回车清空
16              
17               Invalidate();//窗口重会操作
18 
19         }
20       else
21       {
22          m_strLine+=(char)nChar;
23          dc.TextOut(0,0,m_strLine);
24       }
25 
26     CView::OnChar(nChar, nRepCnt, nFlags);
27 }

2.进行代码创建菜单的技巧
第一步:在资源选项中添加abc 添加子菜单,设置其ID名
第二步:在resource.h中添加 ID名和ID号
第三步:添加各自的命令窗口函数,并删除
第四步:oncommand映射中必须要放出来,因为已经删除,不能放在系统自定义区域

 1 BEGIN_MESSAGE_MAP(CMenu3View, CView)
 2 //{{AFX_MSG_MAP(CMenu3View)
 3 ON_WM_CHAR()
 4 ON_WM_CANCELMODE()
 5 
 6 //}}AFX_MSG_MAP
 7 // Standard printing commands
 8 ON_COMMAND(IDM_PHONE1, OnPhone1)
 9 ON_COMMAND(IDM_PHONE2, OnPhone2)
10 ON_COMMAND(IDM_PHONE3, OnPhone3)
11 ON_COMMAND(IDM_PHONE4, OnPhone4)
12 ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
13 ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
14 ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
15 END_MESSAGE_MAP()

 

3.了解消息机制oncommand可以提前获知消息

 1 BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam) 
 2 {
 3 int MenuCmdId=LOWORD(wParam);//通过LOWORD获取低位
 4 CMenu3View *pView=(CMenu3View *)GetActiveView();//这是View类在CMainFrame中的调用,通过创建一个具体的对象来实现,需要包含头文件
 5 //GetActiveView()是调取CMainFrame相关的类
 6 if(MenuCmdId>=IDM_PHONE1 && MenuCmdId<IDM_PHONE1+pView->m_strArray.GetSize())
 7 {
 8 // MessageBox("Test");
 9 CClientDC dc(pView);//因为字符数组在view类,所以dc(pView)
10 dc.TextOut(0,0,pView->m_strArray.GetAt(MenuCmdId-IDM_PHONE1));//m_strArray是public
11 return TRUE;//返回TRUE就不再执行View操作
12 }
13 
14 return CFrameWnd::OnCommand(wParam, lParam);
15 }

 

MFC动态菜单

标签:

原文地址:http://www.cnblogs.com/Alimonky/p/5950596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!