OnCreate是MFC窗口类和窗口派生类中WM_CREATE消息的响应函数。
添加该函数,在VC6中可以使用ClassWizard向导,在VS2003和以上环境中,需要选中对应的类(在类视图或者打开对应头文件都可以),之后在右下方的属性窗口中,点击消息按钮,找到对应的消息(WM_CREATE),并选择“添加 OnCreate”即可。如图所示:
1、首先创建对话框模板资源
2、从CDialog类派生自己的无模式对话框类:CModelessDlg
3、在合适的位置动态创建(new)CModelessDlg的对象:pDlg
4、调用pDlg的Create函数创建无模式对话框
5、调用pDlg的ShowWindow函数显示无模式对话框;
6、覆盖OnOK和OnCancel函数,执行DestroyWindow函数销毁无模式对话框
7、覆盖PosNcDestroy函数,执行delete
this;
MFC基于对话框——右键d出菜单,并响应函数。
1、新建一个菜单资源,比如把菜单的ID号为IDR_MENU1。
2、在ClassWizard中
void CArcSoft_EffectDlg::OnRButtonDown(UINT nFlags, CPoint point)
{// TODO: Add your message handler code here and/or call default
CMenu menu; //定义下面要用到的cmenu对象
menuLoadMenu(IDR_MENU1); //装载自定义的右键菜单;
CMenu pContextMenu=menuGetSubMenu(0); //获取第一个d出菜单,所以第一个菜单必须有子菜单;
CPoint point1;//定义一个用于确定光标位置的位置;
GetCursorPos(&point1);//获取当前光标的位置,以便使得菜单可以跟随光标
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1x,point1y,AfxGetMainWnd()); //在指定位置显示d出菜单;
CDialog::OnRButtonDown(nFlags, point1)};
这时,当右键点击对话框,就可以将菜单调出来了,如何响应菜单项有如下 *** 作:
3、在资源视图中右键单击菜单项,建立类向导(ClassWizard),此时会d出一个对话框,点击第二个,加入到已存在的类,按确定。
4、在资源视图中为菜单中的每一项建立类向导,并添加Command响应函数,然后在这个函数中加入语句就可以啦。
ON_COMMAND(ID_COPY, OnCopy)//加Command响应函数,自动出现的灰色语句
void CArcSoft_EffectDlg::OnCopy()
{// TODO: Add your command handler code here
MessageBox("复制成功!");
MFC文档的菜单栏中添加一个command响应函数
基于CFormView的应用程序,经常会在菜单栏中添加一个按钮,点击该按钮时,会d出一个对话框~~
具体实现方式如下
1新建一个对话框资源,同时新建一个对话框类和该资源对应,舍对话框类名为CTestDialog;
2在资源视图中找到Menu 这个文件夹,双击里面的文件IDR_MAINFRAME,在这里可以添加自己想要的菜单,也可把原来的文件、编辑等菜单给删掉~~
添加菜单的方法:右击右侧空白区域,选择properties,d出的对话框中,把pop_up勾选掉,添加一个ID和CAPTION,设ID为ID_MYTEST,caption|为测试
(要注意的是,最好选择View类,而不是Frame类或其他类)
3Ctrl+Wd出类向导,message maps中的class name 选择为View类,
从Object IDs中找到我们上一步设置的ID_MYTEST,右侧的message选择Command命令,添加一个命令响应函数;
4在该函数中添加
CTestDialog dlg;
dlgDoModal();
5对应的菜单项添加WM_COMMAND消息,在命令响应函数中DoModal/Create/ShowWindow()你的对话框即可。
6消息映射:
ON_COMMAND(菜单编号,处理函数)
h
public:
处理函数
cpp
处理函数
{
CDialog dc;
dcdomodal();
}
d出非模态对话框的方法:
(1)用类向导给菜单栏中菜单添加一个响应函数
(2) 在头文件中加入
#include "Dlgh"
public:
CDlg Dlg;
(3)在代码中加入
Dlg=new CDlg(this);
Dlg->Create(IDD_DIALOG1); // IDD_DIALOG1为对应的菜单栏中那个按钮的ID
Dlg->ShowWindow(SW_RESTORE);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)