MFC 对话框的使用

原创 2012年03月24日 09:31:29

常规的对话框分为模态和非模态,建立对话框的一般过程为:

1.在资源当中添加好对话框资源

2.通过在对话框资源当中为对话框添加类来为对话框添加成员变量及成员函数等

对话框的类一般都是继续自CDialog或CDialogEx,在成员变量当中有一个枚举变量指明了对话框资源:

enum { IDD = IDD_DIALOG2 };

对话框中有两个函数一般需要重载,分别是

afx_msg void OnOK();
afx_msg void OnCancel();

他们的消息映射可以使用:

ON_BN_CLICKED(IDOK, &NewDialog::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &NewDialog::OnBnClickedCancel

对于对话框的数据交换,可以通过在对话框资源上与一个变量进行关联来实现,

CDialog有一个DoDataExchange()的函数来管理对话框的数据交换,关联后,会在对话框的相应类当中添加一个成员变量,及在其DoDataExchange()当中添加一行:

DDX_Text(pDX, IDC_EDIT1, m_Edit);//苦中IC_EDIT1是控件ID,m_Edit是刚关联的变量名,这是一个值关联

关联好后如果需要更新数据,可以调用:

UpdateData(TRUE);


将控件上的数据写入成员变量

UpdateData(FALSE);
将变量写入控件.

这样就可以在视图类当中直接产生对象,然后调用DoModel方法就可以调用对话框了


MFC的预置的对话框常用的有文件对话框和字体选择对话框,一般的文件对话框创建过程为:

	char* filters="Wodk|*.doc|bmp|*.bmp|All|*.*";//类型选择
	CFileDialog fileDlg(TRUE,NULL,"*.doc",NULL,filters);
	int result=fileDlg.DoModal();//获取返回值
	CString openfileName;
	if(result==IDOK)
	{
		openfileName=fileDlg.GetFileName();//获取选择的文件名
	}

字体选择对话框一般的创建过程为:

	LOGFONT m_logFont;//一种字体信息数据结构
	CFontDialog fontDialog(&m_logFont);//以字体数据结构为参数初始化对话框
	int resultID=fontDialog.DoModal();
	if(resultID==IDOK)
	{
		CFont font;
		CFont *oldFont;
		COLORREF color;
		CClientDC client(this);
		fontDialog.GetCurrentFont(&m_logFont);//获取选择字体名字
		font.CreateFontIndirectA(&m_logFont);//创建字体
		color=fontDialog.GetColor();//获取选中的颜色
		oldFont=(CFont*)client.SelectObject(font);//设置绘图区
		client.SetTextColor(color);
		client.TextOutA(20,60,"adfadsfasdf");
	}




非模态对话框一般用动态创建的方法建立,过程一般与模态差不多,不过在资源文件当中要对非模态对话框添加一个

WS_VISIBLE

的风格.

非模态对话框有两个比较重要的函数方法,在动态创建好非模态对话框的对象指针后,如果对象已经生成但末显示,可以调用

SetActiveWindow()

函数激活.如果对象末生成,可以调用父类的函数:

CDialog::Create(ClassName::IDD);//ClassName::IDD为要创建的对话框的ID信息.通常这个方法需要重载
属性页的建立:
属性页有两个部分,一个是Page,一个是Sheet,后者可以说是前者的容器,前者是一个个独立的对话框.对于前者的建立与上无异,不过在添加类的时候要用CPropertyPage作为基类继承.而属性页Sheet并不需要为其建立一个对话框资源,只要在解决方案当中添加一个MFC类,这个类继承自CPropertySheet就可以了,一般情况下在Sheet的构造当中添加属性页面,如:
AddPage(&m_pPropertyPage);//苦中m_mPropertyPage是一个属性页的对象,可以作为Sheet的成员变量

然后在view当中对属性页进行初始化显示就可以了:

CMySheet sheet("MySheet");
sheet.DoModel();





在MFC对话框中显示html网页

头文件: [cpp] view plain copy  print? #pragma once   #include    #include   ...
  • u011473714
  • u011473714
  • 2017年02月22日 23:47
  • 795

MFC对话框程序中使用OpenGL

在MFC的对话框程序中需要使用OpenGL在某个对话框中作图,综合和网上的两篇文章的内容(文章一,文章二),也有自己的心得体会。         首先需要配置好opengl的环境,程序中会使用到gla...
  • u012501459
  • u012501459
  • 2013年12月02日 13:50
  • 2256

MFC对话框编程详细学习笔记

因最近研究工作要用到MFC,故再次重温了孙鑫老师的MFC对话框编程,因所用的编译软件为VS2008,与视频中孙老师使用的VC++6.0有很大出入,造成很大不便,我通过各方查找,实现了VS2008相对应...
  • Bright_Geek
  • Bright_Geek
  • 2014年10月25日 20:29
  • 2820

MFC对话框处理滚动条

MFC对话框处理滚动条flyfish头文件//成员变量 //在资源视图中看到的对话框的大小 CRect m_rectOriginal; // 鼠标拖拽 BOOL...
  • flyfish1986
  • flyfish1986
  • 2017年05月23日 14:51
  • 996

MFC的对话框中使用OpenGL绘图

我们在编写软件是总是会有自己的界面,当然利用C++就不得不喝MFC打交道了,那么可视化界面通常就要用MFC的Dialog;OpenGL通常画图时会自己生成一个窗口,就如同OpenCV一样,但现在我想O...
  • u010260855
  • u010260855
  • 2014年03月18日 23:36
  • 3591

用VC6.0建立MFC工程,建立对话框和简单的实现跳转

对话框的新建及跳转 点击File->New->Project->MFC AppWizard(exe)填写好路径和工程名称 选择dialog based。点击Finish。就新建好了。   右键...
  • liangyong_hui
  • liangyong_hui
  • 2016年06月30日 23:57
  • 3053

MFC中,模态对话框的使用

windows8,vs2012环境,MFC中创建模态对话框的具体步骤
  • lqs1306
  • lqs1306
  • 2016年12月23日 10:05
  • 326

MFC 实现对话框 背景贴图的几种方式

注意:   1.使用软件为VS2010    2.头文件包含如下定义 //背景图存放路劲 #define BACK_GROUND_BMP            TEXT("res\\BACKGROUN...
  • woshiyuanlei
  • woshiyuanlei
  • 2015年03月23日 18:21
  • 770

mfc对话框类中多线程

做数据库的查询和显示,用到多线程。(对话框点击按钮查询,然后列表显示) 1、先定义线程函数 unsigned int __stdcall CDlg::QueryThreadFunc1( L...
  • XuePiaoFei1
  • XuePiaoFei1
  • 2015年11月11日 09:57
  • 905

【mfc】用对话框的切换实现重新登录

上次《【mfc】用对话框分页实现用户登录》(点击打开链接)是一个实现对话框分页登录的Win32程序,与mfc一点关系都没有,虽然Win32程序是mfc程序的基础,但是在mfc中怎么能够实现对话框的切换...
  • yongh701
  • yongh701
  • 2015年01月28日 07:50
  • 3797
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 对话框的使用
举报原因:
原因补充:

(最多只允许输入30个字)