MFC中菜单响应函数如何创建?

MFC中菜单响应函数如何创建?,第1张

MFC基于对话框——右键d出菜单,并响应函数。\x0d\x0a1、新建一个菜单资源,比如把菜单的ID号为IDR_MENU1。\x0d\x0a\x0d\x0a2、在ClassWizard中\x0d\x0a\x0d\x0avoid CArcSoft_EffectDlg::OnRButtonDown(UINT nFlags, CPoint point)\x0d\x0a\x0d\x0a{// TODO: Add your message handler code here and/or call default\x0d\x0aCMenu menu //定义下面要用到的cmenu对象\x0d\x0a\x0d\x0amenu.LoadMenu(IDR_MENU1)//装载自定义的右键菜单;\x0d\x0a\x0d\x0aCMenu *pContextMenu=menu.GetSubMenu(0)//获取第一个d出菜单,所以第一个菜单必须有子菜单;\x0d\x0a\x0d\x0aCPoint point1//定义一个用于确定光标位置的位置;\x0d\x0a\x0d\x0aGetCursorPos(&point1)//获取当前光标的位置,以便使得菜单可以跟随光标\x0d\x0a\x0d\x0apContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,AfxGetMainWnd())//在指定位置显示d出菜单;\x0d\x0a\x0d\x0aCDialog::OnRButtonDown(nFlags, point1)};\x0d\x0a\x0d\x0a这时,当右键点击对话框,就可以将菜单调出来了,如何响应菜单项有如下 *** 作:\x0d\x0a3、在资源视图中右键单击菜单项,建立类向导(ClassWizard),此时会d出一个对话框,点击第二个,加入到已存在的类,按确定。\x0d\x0a\x0d\x0a4、在资源视图中为菜单中的每一项建立类向导,并添加Command响应函数,然后在这个函数中加入语句就可以啦。\x0d\x0a\x0d\x0aON_COMMAND(ID_COPY, OnCopy)//加Command响应函数,自动出现的灰色语句\x0d\x0a\x0d\x0avoid CArcSoft_EffectDlg::OnCopy() \x0d\x0a{// TODO: Add your command handler code here\x0d\x0aMessageBox("复制成功!")\x0d\x0a\x0d\x0aMFC文档的菜单栏中添加一个command响应函数\x0d\x0a\x0d\x0a基于CFormView的应用程序,经常会在菜单栏中添加一个按钮,点击该按钮时,会d出一个对话框~~\x0d\x0a具体实现方式如下\x0d\x0a\x0d\x0a1.新建一个对话框资源,同时新建一个对话框类和该资源对应,舍对话框类名为CTestDialog\x0d\x0a\x0d\x0a2.在资源视图中找到Menu 这个文件夹,双击里面的文件IDR_MAINFRAME,在这里可以添加自己想要的菜单,也可把原来的【文件】、【编辑】等菜单给删掉~~\x0d\x0a\x0d\x0a添加菜单的方法:右击右侧空白区域,选择properties,d出的对话框中,把pop_up勾选掉,添加一个ID和CAPTION,设ID为ID_MYTEST,caption|为【测试】\x0d\x0a\x0d\x0a(要注意的是,最好选择View类,而不是Frame类或其他类)\x0d\x0a\x0d\x0a3.Ctrl+Wd出类向导,message maps中的class name 选择为View类,\x0d\x0a\x0d\x0a从Object IDs中找到我们上一步设置的ID_MYTEST,右侧的message选择Command命令,添加一个命令响应函数;\x0d\x0a\x0d\x0a4.在该函数中添加\x0d\x0a\x0d\x0aCTestDialog dlg\x0d\x0a\x0d\x0adlg.DoModal()\x0d\x0a\x0d\x0a5.对应的菜单项添加WM_COMMAND消息,在命令响应函数中DoModal/Create/ShowWindow()你的对话框即可。\x0d\x0a\x0d\x0a6.消息映射:\x0d\x0a\x0d\x0aON_COMMAND(菜单编号,处理函数)\x0d\x0a\x0d\x0a.h\x0d\x0a\x0d\x0apublic:\x0d\x0a\x0d\x0a处理函数\x0d\x0a\x0d\x0a.cpp\x0d\x0a\x0d\x0a处理函数\x0d\x0a\x0d\x0a{\x0d\x0a\x0d\x0aCDialog dc\x0d\x0a\x0d\x0adc.domodal()\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0ad出非模态对话框的方法:\x0d\x0a\x0d\x0a(1)用类向导给菜单栏中菜单添加一个响应函数\x0d\x0a\x0d\x0a(2) 在头文件中加入\x0d\x0a\x0d\x0a#include "Dlg.h"\x0d\x0a\x0d\x0apublic:\x0d\x0a\x0d\x0aCDlg *Dlg\x0d\x0a\x0d\x0a(3)在代码中加入\x0d\x0a\x0d\x0aDlg=new CDlg(this)\x0d\x0a\x0d\x0aDlg->Create(IDD_DIALOG1) // IDD_DIALOG1为对应的菜单栏中那个按钮的ID\x0d\x0a\x0d\x0aDlg->ShowWindow(SW_RESTORE)

比如说你在某个界面上要右击菜单,你就先加那个界面的鼠标右键消息响应函数假设叫OnReportRClick()然后你再OnReportRClick()函数里加如下代码:

CMenu menu

VERIFY( menu.LoadMenu( IDR_MENU_XXXXXX ) )

CMenu* popup = menu.GetSubMenu(0)

ASSERT( popup != NULL )

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

这时候右键菜单就能d出来啦。。。你再单独写响应每个选项ID的鼠标左键消息不就行了吗

响应某个菜单项的消息

ON_COMMAND(ID_XXX, &CDlgXXX::OnXXX);//ID_XXX是某个菜单项的ID


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11951694.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存