首页 > 代码库 > MFC动态菜单
MFC动态菜单
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 else21 {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是public11 return TRUE;//返回TRUE就不再执行View操作12 }13 14 return CFrameWnd::OnCommand(wParam, lParam);15 }
MFC动态菜单
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。