关闭

MFC 对话框的使用

标签: mfc数据结构dialognull
677人阅读 评论(0) 收藏 举报
分类:

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

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();





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:25575次
    • 积分:528
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:0篇
    • 译文:1篇
    • 评论:4条
    文章分类
    最新评论