MFC通用对话框

合集下载

mfc创建对话框的基本步骤

mfc创建对话框的基本步骤

mfc创建对话框的基本步骤创建MFC对话框的步骤如下:1. 新建MFC项目。

在创建项目时,选择visual c++选项卡,然后选择MFC。

在右侧选择MFC应用程序,并在下方填写项目名称。

2. 选择应用程序类型。

在创建项目的过程中,你需要选择应用程序类型。

你可以选择单文档或基于对话框的应用程序类型。

以基于对话框的应用程序为例。

3. 添加对话框。

右键点击“Resource Files”,然后选择“Add Resource”。

在弹出的对话框中,选择“Dialog”,然后点击“New”。

这将在资源视图中创建一个新的对话框。

4. 给新的对话框重写ID。

右键点击新创建的对话框,选择“属性”,在属性页中修改IDD为所需的ID,例如IDD_EXEC。

5. 为模态对话框添加类。

右键点击选中的对话框,然后选择“添加类”。

在弹出的对话框中,输入类的名称,然后点击“确定”。

这将为对话框创建一个新的类。

6. 添加控件。

在对话框编辑器中,你可以直接从工具箱里拖动控件到对话框上。

例如,你可以拖动按钮控件到对话框上。

7. 添加事件处理程序。

对于每个添加的控件,你都可以为其添加事件处理程序。

你可以通过右键点击控件,然后选择“添加事件处理程序”来添加事件处理程序。

在弹出的对话框中,选择相应的事件(例如单击事件),然后在右侧的代码编辑器中编写事件处理程序。

8. 运行对话框。

在完成对话框的编辑后,你可以运行对话框来测试其功能。

你可以通过点击工具栏上的“启动”按钮或按F5键来启动应用程序。

这些步骤可以帮助你创建一个基本的MFC对话框。

当然,具体的实现方式还需要根据你的需求进行调整和修改。

MFC之编写一个简单的登录对话框

MFC之编写一个简单的登录对话框

编写一个简单的登录对话框大家好,我们利用MFC编写一个简单的登录对话框。

主窗体是单文档界面。

程序运行的时候,先弹出一个简单的登录对话框,输入用户名和密码后主窗体显示出来。

1、开打VC++6.0。

点击文件,新建,点击工程中的MFC AppWizard(exe),在右边选择工程保存的位置,并且为工程取好名字。

2、点击确定后,选择单个文档,你可以一直点击下一步,直到完成,或者在这里直接点击完成即可,完成后界面如下。

3、点击工具栏中的“!”号试着编译运行一次,看是否有问题。

如果没有问题,我们继续。

点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。

4、在右边新增的对话框中,适当改变窗口大小,加入静态文本框和文本编辑框。

5、鼠标右键单击刚才加进去的第一个静态文本框控件,点击属性。

在弹出的标题中填写:输入用户名:。

然后回车、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出选择建立Create a new class,点击OK。

这是为这个对话框创建一个新的类。

在Name中,为该对话框类取个名字:CDlg_login。

下面的Base class以及Dialog ID不要随便改动。

然后点击OK。

这样新的类CDlg_login就与本对话框建立起了联系。

8、点击OK后,我们并没有退出建立类向导。

点击member variables。

9、左键双击IDC_EDIT_NAME(或者单击后,点击右边的add variables),为IDC_EDIT_NAME增加一个对应在类中的名字:m_login_name。

其他地方不要改动。

点击OK。

同样也对IDC_EDIT_PWD也取一个名字:m_login_pwd。

10、点击确定。

这样我们就建立好了登录对话框以及其对应的类CDlg_login。

我们在ClassView里面可以看到我们新加入类CDlg_login。

11、我们注意到右边的对话框的标题栏上依然还是Dialog,我们可以在对话框空白的地方单击右键,点击属性,在标题中输入:请登录。

mfc对话框基础要点

mfc对话框基础要点

第五章对话框对话框是一种用户界面,它的主要功能是输出信息和接收用户的输入。

对话框与控件是密不可分的,在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互。

一个典型的对话框例子是选择了File-Open命令后弹出的文件对话框。

5.1对话框和控件的基本概念5.1.1对话框的基本概念对话框(Dialog)实际上是一个窗口。

在MFC中,对话框的功能被封装在了CDialog类中,CDialog类是CWnd类的派生类。

对话框分为模态对话框和非模态对话框两种。

大部分读者都会有这样的经历,当你通过File-Open命令打开一个文件对话框后,再用鼠标去选择菜单将只会发出嘟嘟声,这是因为文件对话框是一个模态对话框。

模态对话框垄断了用户的输入,当一个模态对话框打开时,用户只能与该对话框进行交互,而其它用户界面对象收不到输入信息。

我们平时所遇到的大部分对话框都是模态对话框。

非模态对话框的典型例子是Windows95提供的写字板程序中的搜索对话框,搜索对话框不垄断用户的输入,打开搜索对话框后,仍可与其它用户界面对象进行交互,用户可以一边搜索,一边修改文章,这样就大大方便了使用。

本节主要介绍模态对话框,在第四节将介绍非模态对话框。

从MFC编程的角度来看,一个对话框由两部分组成:1.对话框模板资源。

对话框模板用于指定对话框的控件及其分布,Windows根据对话框模板来创建并显示对话框。

2.对话框类。

对话框类用来实现对话框的功能,由于对话框行使的功能各不相同,因此一般需要从CDialog类派生一个新类,以完成特定的功能。

5.1.2控件的基本概念图5.1对话框中的控件控件(Control)是独立的小部件,在对话框与用户的交互过程中,控件担任着主要角色。

控件的种类较多,图5.1显示了对话框中的一些基本的控件。

MFC的控件类封装了控件的功能,表5.1介绍了一些常用的控件及其对应的控件类。

表5.1控件实际上都是窗口,所有的控件类都是CWnd类的派生类。

几种MFC对话框的隐藏方法

几种MFC对话框的隐藏方法

几种MFC对话框的隐藏方法有很多应用程序要求一起动就隐藏起来,这些程序多作为后台程序运行,希望不影响其他窗口,往往只在托盘区显示一个图标。

这些程序通常都是对话框程序,而对话框在初始化的过程上与SDI、MDI的初始化是不同的,对话框只需要DoModule或者是CreateDialog等等对话框函数调用一次便可,SDI、MDI则要好几步才行。

这样看来,对话框在使用方法上面是隐藏了不少细节的,其中就没有SDI、MDI所要求的ShowWindow(nCmdShow)这一步。

因此对话框要想一运行就隐藏,并不是很直接的。

有一些方法可以做到这一点,下面我们就来看看几种方案。

1.定时器最直观,又是最无奈的一个方法就是使用定时器。

既然我们在对话框开始显示之前不能用ShowWindow(SW_HIDE)将其隐藏,那就给一个时间让它显示,完了我们在隐藏它。

方法:1.在OnInitDialog()函数里设置定时器:(WINDOWS API里面响应消息WM_INITDIALOG)SetTimer(1, 1, NULL);2.添加处理WM_TIMER的消息处理函数OnTimer,添加代码:if(nIDEvent == 1){DeleteTimer(1);ShowWindow(SW_HIDE);}这种方法的缺点是显而易见的,使用定时器,使得程序的稳定性似乎打一个折扣;窗口是要先显示出来的,那么效果就是窗口闪了一下消失。

2.改变对话框显示状况在对话框初始化时改变其显示属性可以让它隐藏起来。

方法是调用SetWindowPlacement函数:BOOL CDialogExDlg::OnInitDialog(){CDialog::OnInitDialog();//DO somethingWINDOWPLACEMENT wp;wp.length=sizeof(WINDOWPLACEMENT);wp.flags=WPF_RESTORETOMAXIMIZED;wp.showCmd=SW_HIDE;SetWindowPlacement(&wp);return TRUE;}在需要显示时(通常是响应热键或者托盘图标的鼠标消息):WINDOWPLACEMENT wp;wp.length=sizeof(WINDOWPLACEMENT);wp.flags=WPF_RESTORETOMAXIMIZED;wp.showCmd=SW_SHOW;SetWindowPlacement(&wp);这样的效果很不理想:窗口显示在屏幕的左上角,并且是只有标题栏,要正常显示,还需加上如下代码:定义一个成员变量CRect rect;在OnInitDialog()里面:GetWindowRect(&rect);在需要显示的地方:SetWindowPos(&wndNoTopMost, wndRc.left, wndRc.top, w ndRc.right, wndRc.bottom,SWP_SHOWWINDOW);CenterWindow();即使这样,效果还是很差。

MFC C++登录对话框编写步骤

MFC C++登录对话框编写步骤
一些具有DLL扩展名或者有时是EXE扩展名的文件。

3.1 创建“登录”对话框 3.1.1 生成默认对话框工程 1.进入VC++ 安装Microsoft Visual Studio 6.0 后,在开始菜单中单击Microsoft Visual Studio 6.0子菜单下的Microsoft Visual C++ 6.0,即可打开VC++ 6.0 编程平台,如图3.2所示。
(c)“用户名”静态文本标签
(d)“确认”按钮属性
如图3.16(e)所示,在“密码”编辑框属性的Styles 选项卡中勾选 Password。这样,程序运行后,用户输入密码到编辑框时将会显示“***”符号。
(e)“密码”编辑框属性
图3.16 设置控件属性
添加的控件可能大小不一,此时可以选定某个控件,移动鼠标到控件边缘 处出现双箭头来调整大小。要设置多个控件之间的位置大小关系时,先按住 Shift键不放,然后用鼠标选取控件,直到所需要的多个控件选取之后再释放 Shift键。若在选取时,对已选取的控件再单击一下,则取消该控件选取。一旦 单个控件被选取后,其四周由选择框包围着,选择框上还有几个蓝色实心小方 块,拖动它可改变控件的大小;多个控件被选取后,其中只有一个控件的选择 框有几个蓝色实心小方块,这个控件称为“主要控件”,而其他控件的选择框 的小方块是空心的。如图3.17所示。
图3.20 “New Class”对话框
Байду номын сангаас
2.为“登录”对话框设置控件关联变量 使用MFC ClassWizard可以很容易地为一个控件定义关联变量并可设置其数 据范围。例如,下面的步骤是为CDlgLogin类的控件IDC_EDIT1和IDC_EDIT2即 “用户名”和“密码”编辑框添加关联变量m_user和m_pass。 (1)按快捷键Ctrl + W,打开MFC ClassWizard,并切换到Member Variables页面,如图3.21所示。

MFC简单的登录对话框

MFC简单的登录对话框

登录对话框我们利用MFC编写一个简单的登录对话框。

主窗体是单文档界面。

程序运行的时候,先弹出一个简单的登录对话框,输入用户名和密码后主窗体显示出来。

1、开打VC++6.0。

点击文件,新建,点击工程中的MFC AppWizard(exe),在右边选择工程保存的位置,并且为工程取好名字。

2、点击确定后,选择单个文档,你可以一直点击下一步,直到完成,或者在这里直接点击完成即可,完成后界面如下。

3、点击工具栏中的“!”号试着编译运行一次,看是否有问题。

如果没有问题,我们继续。

点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。

4、在右边新增的对话框中,适当改变窗口大小,加入静态文本框和文本编辑框。

输入用户名:。

然后回车同样在下面的第二个静态文本框的属性标题改为:输入密码:。

然后回车。

6、在第一个文本编辑框上右键单击,点击属性,把ID框中的IDC_EDIT1改为容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,这样容易见名而知义。

同样,对第二个文本编辑框的属性中的IDC_EDIT2改为:IDC_EDIT_PWD7、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出选择建立Create a new class,点击OK。

这是为这个对话框创建一个新的类。

在Name中,为该对话框类取个名字:CDlg_login。

下面的Base class以及Dialog ID不要随便改动。

然后点击OK。

这样新的类CDlg_login就与本对话框建立起了联系。

8、点击OK后,我们并没有退出建立类向导。

点击member variables。

9、左键双击IDC_EDIT_NAME(或者单击后,点击右边的add variables),为IDC_EDIT_NAME增加一个对应在类中的名字:m_login_name。

其他地方不要改动。

第8章 MFC对话框

第8章  MFC对话框
DoDataExchange()函数 控件将事件消息发往父窗体(对话框),在对话框类内可以处理它们
谢谢 Thanks for listening.
- 16 -
void CRegDlg::OnBnClickedOk() {
/*1、访问对话框控件*/ char chPhone[30]; memset(chPhone,0,sizeof(chPhone)); GetDlgItem(IDC_ED_PHONE)->GetWindowTextW((LPTSTR)chPhone,20); GetDlgItem(IDC_ED_PHONE2)->SetWindowTextW((LPTSTR)chPhone); }
- 19 -
标准控件与对话框—对话框数据交换与验证
数据交换:
在对话框类中,MFC自动添加了DoDataExchange()函数,在其中实现对 话框控件数据的交换和验证机制。
void CRegDlg::DoDataExchange(CDataExchange* pDX) {
CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_ED_USERNAME, m_edUserName); DDX_Text(pDX, IDC_ED_PHONE, m_edPhone); DDX_Text(pDX, IDC_ED_EMAIL, m_edEmail); }
SetDlgItemText(IDC_ED_PHONE2,(LPTSTR)chPhone);
}
- 17 -
class CRegDlg : public CDialog {
…… char phone[30];//此处是向导添加的变量 }; …… GetDlgItemText(IDC_ED_PHONE,(LPTSTR)phone,20); SetDlgItemText(IDC_ED_PHONE2,(LPTSTR)phone); ……

MFC对话框几个对话框程序例子建立对话框与相应程序相关联

MFC对话框几个对话框程序例子建立对话框与相应程序相关联

MFC对话框和对话框类几个对话框程序例子建立对话框与相应的程序相关联如何建立对话框与相应的程序相关联:在MFC中,对资源的操作都是建立相关的类来完成的;所以我门先NEW 一个对话框资源然后建立他的类与相应的应用程序相关联就可以;步骤:1 NEW 一个对话框资源2 在资源上选择 Classwarrzd上创建一个新的类(或在资源上双击左键)3 起名字!(注意文件名将会去掉C 例如我门的名字叫 CDaiDlg那么文件名是 DaiDlg);对话框的俩种类型:1 模态对话框(特性:当建立模态对话框时,将不允许用户点击对话框以外的控件后应用程序本身,也就是说当模态对话框建立时应用程序停止运行而只运行对话框,所以模态对话框是可以使用局部变量的定义方法的!)模态对话框是比较方便的一种对话框~建立函数:int CDialog::DoMadol() //注意他是CDialog类成员也就是说想使用先建立一个 CDialog 对象吧如果我门想要在View类中建立一个 CDialog对象不要忘了要在View的Cpp 文件中包含 CDialog.h2 非模态对话框(特性与模态的相反)使用成员函数 BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );nIDTemplate 为对话框的ID号pParentWnd 拥有这个对话框的对象指针,如果是NULL 为默认的主应用窗口也就是 Frame应用窗口注意如果我门在使用Create创建非模态对话框时要调用一个函数来显示这个对话框CWnd::ShowWindow(SW_SHOW);不仅这样非模态对话框时不能是局部变量!完整代码: CDialog dlg;dlg.Create(ID,this);dlg.ShowWindow(SW_SHOW):对ShowWindow的发现: ShowWindow是CWnd的成员函数是改变窗口的显示属性(包括Hide Show等)ShowWindow这一函数是改变属性同样在创建一个窗口时(窗口包括很多,CButton也是一个窗口!)可以直接给他赋予属性 WS_VISIBLE (可见的)等属性也可以解决改变窗口之后更新窗口的问题显示出新窗口的问题~!对于俩种对话框的销毁;模态对话框中OnOK的成员函数中有对模态对话框的 EndDialog();来销毁而非模态的对话框时 OnOK不能销毁对话框而我门需要对OnOK函数进行覆盖调用DestryWindow;做一个对话框的小程序,在对话框上动态增加一个按钮:在这要强调一下动态的增加某种资源是需要把资源对象声明成类的成员这样才可以(不然被析构了建立了也就没有效果了)而资源对象是对象资源是资源只有吧资源和对象联系起来这个的东西才有实际的意义,我门才能对他进行操作,而把资源和对象联系起来有俩个函数 LoadMenu 和CreateMenu (当然有些类是不存在 Load函数的例:Button类) Load函数是将一个已经被我门在资源视图中创建好的东西与对象联系而Create函数是直接创立一个新的东西(而直接创立时我门还需要给他一些这样东西的属性所以使用Create函数时总是件另人讨厌的事情~)更重要的事情是:一个对象只能与一个资源相联系如果你想把这个已与资源联系的对象与另一个资源联系起来那必须先调用DestoryWindow()这个资源然后在做新的联系;静态文本框的操作:刚刚建立的静态文本框是不可以做消息响应的(一般也不需要这么去做)而我门想要去用静态文本框的消息就要改边文本框的 ID (因为一般不给文本框添加消息响应文本框的的ID都是一样的)并且要把属性->样式(Styles)->通告(Notify)打上对号!!几个有用的函数:获得窗口的文本CWnd::int GetWindowText(CString &str);CWnd::int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const; 参数str是放置文本的对象!lpszStringBuf是一个字符串的指针,nMaxCount 到大的最大字符数同样使用 SetWindowText(CString str)SetWindowText(LPCTSTR lpszString);来设置文本获得对话框上控件的指针(控件包括了Button,静态文本等等!)CWnd::CWnd* GetDlgItem( nID )使用ID号来获取控件的指针!从而进行操作!从编辑框得到数据的几种操作1 使用GetDlgItem( nID )->GetWindowText( )然后把字符转换为我门所要的东西(使用 atoi,itoa 的转换函数)这几个函数所要注意的问题使用函数前一定要确定这个函数是对谁操作!对谁操作要获取谁的指针!!GetWindowText(LPTSTR lpszStringBuf, int nMaxCount )这个函数参数lpszStringBuf所要存储的指针 nMaxCount 是最大得到多少个字符~使用代码例子:char str[10];GetDlgItem( nID )->GetWindowText(str,10 );//注意第一个参数使用的是指针aoti itoa 函数介绍:(介绍前的感想,做ACM时看到程序就要将程序分成一个一个功能函数,然后将功能函数做好,从来没有想过使用他人做好的函数,而现在学习了MFC这套教程,养成的第一个习惯就是寻找自己想要的函数在MSDN中,然后再自己编写算是一种偷懒的行为吧,估计在以后的编程中,也要养成先寻找和想要的类模型差不多的类然后在通过继承派生来得到想要的类模型,这可能就是代码重用的本质吧 ~ MS就是一大堆会偷懒的编程员 ~呵呵)double atof( const char *string );int atoi( const char *string );__int64 _atoi64( const char *string );long atol( const char *string );这四个函数不用多说了,要注意的就是参数的问题,不要看参数名字叫 string 就是一个CString 成员而是 char*(指针) 也就是数组的名字返回型是相应转化的数据类型;(这是一个不错的函数)不过要注意他是需要包含头文件Routine Required Header Compatibilityatof <math.h> and <stdlib.h> ANSI, Win 95, Win NTatoi <stdlib.h> ANSI, Win 95,Win NT_atoi64 <stdlib.h> Win 95, Win NTatol <stdlib.h> ANSI, Win 95, Win NT还可以反过来 itoa, ftoa等等做一个介绍char *_itoa( int value, char *string, int radix );value要转换的数char *string 一个buffer 接受转换后的字符串int radix 十进制啊二进制 ...==(还有这里的 atoi 的 a 是ASCII的 A 这就解释了为什么不是ctoi~)2 使用函数GetDlgItemText( nID,LP... ),SetDlgItemText(nID,LP...)(这函数不仅长的象 GetDlgItem 和 GetWindowText 的混合体功能更是相同...又个偷懒的杰作!)int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;int GetDlgItemText( int nID, CString& rString ) const;void SetDlgItemText( int nID, LPCTSTR lpszString ); 使用也是一样的!比那个能方便点~!3 又一个混合体函数 GetDlgItemInt();; SetDlgItemInt()在2的基础上来atoi都不用了!UINT CWnd:: GetDlgItemInt( int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE ) const;nID ID号lpTrans 如果NULL 那么不会给出错误的提示bSigned 是否是有符号的数字(就是是否去转化符号“-”) TRUE就是有符号啦!!void SetDlgItemInt( int nID, UINT nValue, BOOL bSigned = TRUE ); nValue 是你想要在DlgItem输出的数字;4 使用资源来关联变量的方式来控制数据交换(这才是重点,因为他不只提供了对数据错误的提示功能还增加了控件与资源的联系当然我门需要了解框架所带给我门的东西;)在控件上使用ClassWarrzd 选择第2个选项卡!(Member Variables)对相应的 ID 号进行资源与数据的联系:观察一下ClassWarrzd给我门在代码里家了些什么:1 在头文件中加了// Dialog Data//{{AFX_DATA(CTextDlg)enum { IDD = IDD_DIALOG1 };int m_num1;int m_num2;int m_num3;//}}AFX_DATA这是数据交换的宏2 在构造函数里给这几个成员变量初始化://{{AFX_DATA_INIT(CTextDlg)m_num1 = 0;m_num2 = 0;m_num3 = 0;//}}AFX_DATA_INIT3 在void CTextDlg::DoDataExchange(CDataExchange* pDX)函数中增加了数据交换声明{CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CTextDlg)DDX_Text(pDX, IDC_EDIT1, m_num1);DDX_Text(pDX, IDC_EDIT2, m_num2);DDX_Text(pDX, IDC_EDIT3, m_num3);//}}AFX_DATA_MAP}对与 void CTextDlg::DoDataExchange(CDataExchange* pDX) 的使用用来数据交换!!这个函数是被框架调用,用来交换和验证数据的函数!这个函数从来不被直接掉用而是通过调用UpdateData()函数来调用这个函数来交换和验证数据的(这句的意思是DoDataExchange 接口是不对我门开放的我门想要掉用 DoDataExchange这个函数必须用UpdateData()来间接调用)BOOL UpdateData( BOOL bSaveAndValidate = TRUE );介绍:参数问题:bSaveAndValidate=TRUE 时数据开始交换(也就是说我门对该变量的操作是生效的)而当他是 FALSE 时数据不再交换而是初始化这个函数(也就是把这个变量的操作失效不过可以在屏幕上进行显示!)通过改变这个参数的值我门可以控制数据的交换或是数据的显示~这是很重要的;!错误的数字使得我门的操作成为无效;~还要说的一点是当创建的是模态对话框时(DoModal)时系统会自动把这个参数变成 FALSE 也就是说我门初始时是不能改变变量的例子代码: UpdateData();m_num3=m_num1+m_num2;UpdateData(FALSE);//我门也可以让控件关联一个控件变量然后在调用他的成员函数进行操作(教程里有讲不过觉得有些多余,也许在其他类型的程序中可能要有用,注意这种方法ClassWarrzd的使用方法)函数 SendMessage( );(注意是SendMessage 而不是SetMessage)是一个发送消息的函数使用....不详,查查SDK API什么的吧~ 功能很强大static LRESULT SendMessage( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )关于SendMessage()函数的说明发送一个响应的消息message,然后用wParam,lParam来接受我门想要的东西(当然这个要取决于我门发的是什么消息现在已知的消息是:WM_SETTEXT,WM_GETTEXT去MSDN 看看)而SendMessage 在API 和 MFC 中都有要注意是谁调用他的原始问题;SendMessage()的变种(向对话框中的子控件发送消息):LRESULT SendDlgItemMessage( int nID, UINT message, WPARAM wParam = 0, LPARAM lParam = 0 ); 用法基本相同对于获取编辑框复选的操作:向编辑框发送一个 EM_GETSEL (同样也是 EM_SETSEL) 要使用SendMessage()来发送//还要注意的是我门已经把复选设置好了有的时候也是看不见效果的,因为我门在操作时点击了按钮或者其他的操作使得焦点没有在我门所设置那个Item上所以我门是看不见结果的我门还要增加一个操作是用函数改变焦点:CWnd* CWnd::SetFocus( );没有参数返回值是以前那个带有焦点的指针;(对与复选最常用的是复选所有的东西,这样我门要把 SendMessage 的wParam =0,lParam =-1)总结:怎么样改变对话框的大小用来增加新的功能?对话框的矩形坐标可以利用一个图形控件和 SetWindowPos 来改变先要知道对话框的矩形坐标通过控件得到(GetWindowRect())矩形坐标 ...这样我门就能知道需要改变什么矩形坐标了void GetWindowRect( LPRECT lpRect ) const; 函数参数 lpRect 用来储存矩形坐标BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags ); 本来是用来改变Window Z-order 的(什么是 Z-order简单说就是显示窗口的顺序)在 79 710 俩课中使用的SDK 函数不再介绍(因为不明白!!)使用default按钮的特性来增加对话框对回车(0x0d)按键响应的操作我门用一个设置输入焦点随回车变化的例子来说明;因为在重载OnOK函数时 OnOK还是会调用基类的 OnOK函数(OnOK函数会自动关闭对话框)而我门不希望我门在输入回车时关闭对话框所以我门将它转化为注释!然后使用函数获取当前焦点的句并 Wnd* GetFocus( )来选择GetNextWindow(UINT nFlag = GW_HWNDNEXT )然后在使用SetFocus( );完整代码:(在Dialog中的 OnOK 函数中)GetFocus()->GetNextWindow()->SetFocus();这个代码逻辑上是可以的,不过执行起来会发生错误,如果一直回车下去回造成程序崩溃;(哪有那么都 GetNext呀?)我门要使用Tab功能的函数来完成这个功能就不会出错了~CWnd* GetNextDlgTabItem( CWnd* pWndCtl, BOOL bPrevious = FALSE ) const;pWndCtl开始时的窗口bPrevious = FALSE 向下走;如何查看 Tab 顺序:布局(layout)-> Tab顺序(Tab Order)OK按钮不管存在不存在都会执行 OnOK函数他的ID 号是IDOK(不是ID_OK 哦)孙鑫MFC教程笔记(菜单.对话框)2007-08-11 20:03对话框先要对消息的传送进行分析:消息分为三类标准消息,命令消息,通告消息;标准消息:是除WM_COMMAND以外的所有以WM_开头的消息(WM_Char,WM_Move 等)命令消息:WM_COMMAND 包括了来自菜单、加速键或工具栏按钮的消息。

Windows编程技术10-对话框

Windows编程技术10-对话框

lplfInitial指向一个LOGFONG结构,用来初始化对话框中的字体设置 dwFlags 用于设置对话框。 pdcPrinter 指向一个代表打印机的CDC对象,若设置该参数, 则选择的字体就为打印机所用 pParentWnd用于指定对话框的父窗口或拥有者窗口。
建立CFontDialog对话框
13
通用对话框
CFileDialog
建立CFileDialog对象 CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt=NULL, LPCTSTR lpszFileName =NULL,DWORD dwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter=NULL, CWnd* pParentWnd = NULL ); bOpenFileDialog为TRUE, 创建打开对话框;为FALSE,创建保存对话框。 lpszDefExt 缺省文件扩展名。 lpszFileName 初始文件名,如果为NULL,则不显示初始文件名。 dwFlags 指明一些特定风格,通过这些风格可定制对话框。 pParentWnd 为指向父窗口或拥有者窗口的指针。 lpszFilter 指向过滤字符串: 1)过滤字符串有由多个子串组成,每个子串由两部分组成,第一部分是文件 类型的文字说明,如“Text file (*.txt)”,第二部分是用于过滤的匹配字符串, 如“*.txt”。 2)子串的两部分用竖线字符“|”分隔开,各子串之间也要用“|”分隔,整个串 的最后两个字符必须是两个连续的竖线字符“||”。 一个典型的过滤字符串如下面所示: char szFilter[]=“DATA files (*.DAT)|*.dat|Text files(*.txt)|*.txt||”;

MFC浏览文件或目录对话框及筛选条件

MFC浏览文件或目录对话框及筛选条件

7.MFC选择目录对话框和选择文件对话框一、选择目录对话框//选择目录按钮void CDcPackerDlg::OnBnClickedDecgen(){char szPath[MAX_PATH]; //存放选择的目录路径CString str;ZeroMemory(szPath, sizeof(szPath));BROWSEINFO bi;bi.hwndOwner = m_hWnd;bi.pidlRoot = NULL;bi.pszDisplayName = szPath;bi.lpszTitle = "请选择需要打包的目录:";bi.ulFlags = 0;bi.lpfn = NULL;bi.lParam = 0;bi.iImage = 0;//弹出选择目录对话框LPITEMIDLIST lp = SHBrowseForFolder(&bi);if(lp && SHGetPathFromIDList(lp, szPath)){str.Format("选择的目录为%s", szPath);AfxMessageBox(str);}elseAfxMessageBox("无效的目录,请重新选择");}二、选择文件对话框CString CDcPackerDlg::BootOpenDialog() //返回选择的文件名称{CString strFile = _T("");CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL); //.cfg可以更换你想筛选出的文件if (dlgFile.DoModal()){strFile = dlgFile.GetPathName();}return strFile;}//加载文件按钮void CDcPackerDlg::OnBnClickedSelectdec(){// TODO: Add your control notification handler code here m_strDescPath = ""; //类的成员变量//"打开文件"对话框,选择文件,返回其路径m_strDescPath = BootOpenDialog();}。

MFC实验二 对话框程序设计

MFC实验二 对话框程序设计

实验二对话框程序设计(一) 实验目的:1 学习如何创建对话框程序,并想其中添加控件。

2 学习如何使用对话框来打开和保存文件。

3 学习创建消息对话框。

在Windows程序中,对话框是最重要的显示信息和取得用户数据的单元;一个应用程序可以拥有几个对话框,这些对话框从用户那里接受特定类型的信息;可以使用资源编辑器创建对话框资源,向其中添加控件,调整对话框的布局,使对话框更加便于使用。

(二) 实验内容:应用实例创建一个基于对话框的应用程序,并添加文件菜单,用来打开和保存文件;建立消息对话框,用来提醒用户在退出前保存文件;同时建立一个属性页对话框,掌握其基本用法。

(三) 实验步骤:实验一:创建简单的对话框应用程序1.使用AppWizard创建一个基于对话框类型的程序Prog01。

在AppWizard的第一页选择“Dialog based” ,生成标准对话框模板。

2.可以设置对话框的属性,右键单击整个对话框的背景,选择“Properties”项,在弹出的对话框中修改此对话框ID为:IDD_PROG01_DIALOG,标题为:“简单计算器”。

当对话框资源完成以后,选择ctrl+w,打开ClassWizard,已经有一个类Prog01Dlg与新的对话框相联系。

3.在控件工作栏点击要添加的空间图标,选择所需的控件。

一共要添加三个静态文本框、三个编辑框、五个命令按钮。

可以改变空间的大小、位置、对齐方式等等。

4.添加控件结束后,设置各个控件的属性。

右键需要设置属性的控件,在弹出的菜单中选择Prperties,或选中控件按回车键。

各个控件的属性设置如下图。

下表列出了本题中所有控件的属性设置以及添加的成员变量:5.为控件添加相对应的成员变量。

执行xiew-class wizard命令或者Ctrl+w,选择member variables ,可以在对话框类中为控件添加关联的成员变量和删除变量。

以第一个编辑框为例,成员变量名为m_floatFirstNum,float型。

MFC 对话框和常用教程

MFC 对话框和常用教程

第五章对话框和常用控件对话框是Windows应用程序中最重要的用户界面元素之一,是与用户交互的重要手段,在程序运行过程中,对话框可用于扑捉用户的输入信息或数据。

对话框是一个特殊类型的窗口,任何对窗口进行的操作(如:移动、最大化、最小化等)都可在对话框中实施,一般来说,在对话框中通过各种控件(如:按钮、编辑框、列表框、组合框等)来和用户进行交互。

控件是在系统内部定义的用于和用户交互的基本单元。

一、对话框的使用Visual C++提供的对话框编辑器能“可视”地进行设计、编辑,并可用ClassWizard为对话框从CDialog基类中派生一个类,MFC的CDialog类封装了用于对话框的显示、关闭等操作的许多功能函数,例如:DoModal函数用来显示模式对话框并返回用户操作的结果。

1、模式对话框(为186附加举例页)所谓模式对话框是指,当对话被弹出时,用户必须在对话框中进行相应的操作,在退出对话框之前,对话框所在的应用程序不能继续执行。

平常我们所见到的对话框大多是模式对话框。

例:模式对话框(通过菜单命令弹出)1)建一个单文档(SDI)应用程序2)创建对话框模板Insert→Resource→选中Dialog→单击New拖过一个静态文本,鼠标对准它,按右键点properties改标题为“新建模式对话框”。

3)鼠标右键对准对话框的任何位置单击,选择properties选项,设置ID为IDD_MYDIALOG 4)给对话框创建类双击新建对话框的任何位置,单击OK,写类名为“CMyDlg”,保证”CDialog”作为该类的基类。

5)创建菜单命令:a)打开资源编辑器的菜单项Menub)双击IDR_MAINFRAMEc)双击右边空白菜单,点开pop_up(让它是空白),在名字处写”弹出对话框(&A)”,ID 处写ID_PUPDIALOG6)将菜单命令连接到主框架程序中,完成ID_PUPDIALOG的消息映射:View→ClassWizard→保证Class name里是CMainFrame,在ObjectIDs里找到ID_PUPDIALOG点黑→Messages里(右边)点COMMAND建立主框架对象方法并加代码:void CMainFrame::OnPupdialog(){ CMyDlg MyDlg;MyDlg.DoModal(); //DoModal()是CDialog类成员函数,通过调用该//函数将显示对话框。

mfc对话框使用

mfc对话框使用

mfc对话框使用
MFC对话框是Windows编程中常用的GUI界面,它提供了一种方便快捷的方式来创建和
管理用户界面。

使用MFC对话框,可以轻松地添加控件、处理事件和响应用户操作。

创建MFC对话框的步骤很简单。

打开Visual Studio并创建一个新的MFC应用程序。

然后,选择“对话框”作为应用程序类型,并选择所需的对话框模板。

接下来,可以在对话框中添
加所需的控件,例如按钮、文本框、列表框等。

可以使用MFC框架提供的事件处理程序
来响应用户操作。

MFC对话框的优点在于它的易用性和灵活性。

通过使用MFC对话框,可以快速创建一个
功能完善的用户界面,同时还可以轻松地对其进行自定义和扩展。

MFC框架还提供了许
多有用的功能,例如自动布局、对话框管理和资源管理等。

MFC对话框是一种非常有用的工具,可以帮助Windows程序员快速创建和管理用户界面。

无论是初学者还是经验丰富的开发人员,都可以从MFC对话框的使用中受益。

[精华版]MFC中CWnd类及其派生类对话框、消息处理、窗口操作

[精华版]MFC中CWnd类及其派生类对话框、消息处理、窗口操作

MFC中CWnd类及其派生类对话框、消息处理、窗口操作CWnd类我们在屏幕上看到的所有对象都和窗口有关,它们或者派生于CWnd,属继承关系,如对话框、工具栏、状态栏、子控件;或者被CWnd合成,属服务员与服务对象关系,如图标、菜单、显示设备。

CWnd类封装的窗口操作主要包含窗口的创建和销毁、操作窗口风格、操作窗口状态、窗口子类化、获取指定窗口等。

当然,CWnd还实现了其他功能:1、绘制窗口GetDC()//取得客户区显示设备上下文GetWindowsDC()//取得整个窗口的显示设备上下文ReleaseDC()BeginPaint()EndPaint()PrintClient()RedrawWindow()//重绘客户区的某区域2、操作窗口子控件GetDlgItem():取得(临时的)控件对象指针SetDlgItemText()和GetDlgItemText():设置、取得控件标题SubclassDlgItem():将控件句柄与相应类相关联DlgDirList()和DlgDirListComboBox():以文件列表或目录列表填充(组合框)列表框CheckDlgButton()和CheckRadioButton():设置复选框(单选按钮)状态。

GetNextDlgTabItem():取得下一个WS_TABSTOP风格控件3、窗口定时器SetTimer():设置定时器KillTimer():销毁定时器4、窗口消息的相关函数GetCurrentMessage():取得当前被处理的消息PreTranslateMessage():可重载的虚函数。

被UI线程的消息循环调用,可以过滤窗口收到的消息,过滤出的消息得以分发SendMessage():向本窗口发送消息。

不通过消息循环,直接调用窗口函数处理消息。

窗口函数执行完毕,该函数才返回PostMessage():向本窗口寄送消息。

将消息放入消息队列,立即返回。

mfc窗口切换

mfc窗口切换

1、建立MFC文件,工程名定义为“qiehuan03”,选择对话框形式。

在主对话框添加按钮控件。

2、在上图左侧“Dialog”右键单击,选择“插入”->“Dialog”->“新建”。

3、选中该新建对话框,右键->“ClassWizard”->“Create a new class”,为类取名为“CSHOWSTATE_DLG”。

4、打开“qiehuan03.cpp”、“qiehuan03Dlg.cpp”、“qiehuan03Dlg.h”,添加头文件“#include"SHOWSTATE_DLG.h"”5、在“qiehuan03Dlg.h”文件中增加语句“CSHOWSTATE_DLG *dlg”。

6、在“qiehuan03Dlg.cpp”文件中添加语句“dlg=new CSHOWSTATE_DLG”。

7、在“qiehuan03Dlg.cpp”文件的OnButton()下添加代码:if(dlg->GetSafeHwnd()==0){dlg->Create(IDD_SHOW_DIALOG);}dlg->ShowWindow(SW_SHOW);编译执行。

教你如何用WORD文档(2012-06-27 192246)转载▼标签:杂谈1. 问:WORD 里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同?答:分节,每节可以设置不同的页眉。

文件――页面设置――版式――页眉和页脚――首页不同。

2. 问:请问word 中怎样让每一章用不同的页眉?怎么我现在只能用一个页眉,一改就全部改了?答:在插入分隔符里,选插入分节符,可以选连续的那个,然后下一页改页眉前,按一下“同前”钮,再做的改动就不影响前面的了。

简言之,分节符使得它们独立了。

这个工具栏上的“同前”按钮就显示在工具栏上,不过是图标的形式,把光标移到上面就显示出”同前“两个字来。

3. 问:如何合并两个WORD 文档,不同的页眉需要先写两个文件,然后合并,如何做?答:页眉设置中,选择奇偶页不同与前不同等选项。

mfc dialog 浮动层样式

mfc dialog 浮动层样式

MFC Dialog 浮动层样式一、介绍MFC DialogMFC(Dialog-based的图形用户界面)是Microsoft Foundation Class 的缩写,是Microsoft公司为VC++提供的一套面向对象的类库。

它是构建Windows程序的一种快速容易的方法。

MFC封装了Windows API,并提供各种类供开发者使用,通过MFC可以快速掌握Windows编程。

MFC Dialog是MFC中对话框类的一个重要子类,对话框是Windows界面程序中常用的一种界面,其窗口类型为对话框窗口。

对话框以资源的形式存在于应用程序中,可以使用资源编辑器进行界面设计。

二、MFC Dialog 浮动层样式的介绍1. MFC浮动层MFC对话框中的浮动层样式是指将对话框中的某个控件或者一组控件设置为浮动状态,使其能够以浮动的形式显示在对话框中,而不占用固定的空间。

这种样式的设计主要是为了满足一些特定的用户交互需求,比如在对话框中显示额外的信息或者设置面板,而不影响原有的界面布局。

2. 浮动层样式的应用场景浮动层样式通常用于用户界面设计中,可以用来实现一些弹出式的面板,如设置面板、提示信息面板等。

通过设置浮动层样式,可以在对话框中临时显示这些面板,并且在不需要时可以隐藏,从而提升用户体验。

3. 实现浮动层样式的方法MFC提供了丰富的界面控件和样式设置方法,实现浮动层样式的方法也多种多样。

最常用的方法是通过控件的显示或隐藏属性来实现浮动层的效果,也可以通过控件的位置和大小属性来调整控件在对话框中的布局。

若要实现更加复杂的浮动层效果,还可以通过自定义绘制控件以及处理鼠标事件的方式来实现。

通过这些方法,可以实现不同类型的浮动层效果,以满足不同的用户需求。

三、MFC Dialog 浮动层样式的实际应用1. 配置面板在一些软件设计中,通常会包含一些配置选项,用户可以通过这些选项来个性化自己的使用体验。

而这些配置选项往往需要放在一个独立的面板中,通过浮动层样式,可以实现这个面板的弹出式显示和隐藏,从而更加方便地进行配置。

打开文件的MFC对话框应用程序

打开文件的MFC对话框应用程序

打开文件操作步骤:1.新建MFC AppWizard [exe] 基本对话框,项目名mfc2.删除对话框模板中原有的“确定”按钮和内容为“TODO: 在这里设置对话控制。

”的StaticText控件。

添加一个按钮(BUTTON),鼠标右键单击该控件,在弹出的下拉菜单中选“属性”,打开属性对话框,将控件ID改为“IDOK”;添加一个静态文本(STATIC),将控件ID改为“IDC_MSG”;3.添加一个编辑框控件,调整适当大小,鼠标右键单击该控件边框,在弹出的下拉菜单中打开属性对话框。

将编辑框控件ID改为“IDC_FILE”。

4. 添加成员变量单击View(查看)>ClassWizard(建立类向导)菜单进入ClassWizard,打开Member Variables选项卡,选中编辑框控件IDC_FILE,单击“Add Variable”按钮,设置对应的变量m_file;选中静态文本控件IDC_MSG,单击“Add Variable”按钮,设置对应的变量m_msg;5. 添加消息映射在ClassWizard对话框中打开Messages Maps选项卡,在Object Ids中选择IDOK,在Messages中单击BN_CLIKED,然后单击按钮“Add Function”,在弹出对话框中单击OK按钮:在Member functions中出现消息映射成员函数OnOK。

6. 添加代码在ClassWizard对话框中的Messages Maps选项卡的Member functions选中OnOK,然后单击Edit Code按钮在OnOK函数体中添加代码:char *fname;ifstream infile;UpdateData(TRUE);fname=(LPSTR)(LPCTSTR)m_file;infile.open(fname,ios::in);float x,s=0;int i=0;if(!infile)m_msg="文件不存在!";else{while(!infile.eof()){infile>>x; //读取数据,每行一个数s+=x;i++;}m_msg.Format("%f",s/i); //输出平均值}UpdateData(FALSE);7. 在项目文件夹里用记事本建立一个文本文件,如a.txt,在文件里输入若干数据(实数),每行一个数,保存后关闭该文件。

对话框类CDialog

对话框类CDialog

对话框类CDialog⼀、对话框资源 1、相关类 CDialog类 -⽗类是CWnd,本质上也是⼀个窗⼝。

是对话框类的顶层⽗类。

CCommonDialog类 -⽗类是CDialog类。

称为通⽤对话框。

MFC提供了6个通⽤对话框,都是CCommonDialog类的⼦类,包括:⽂件对话框、颜⾊对话框、字体对话框、查找替换对话框、打印对话框、打印设置对话框。

CPropertyPage -⽗类是CDialog类,属性页对话框。

2、分类 模式对话框和⾮模式对话框 3、使⽤MFC的类创建基于模式对话框的应⽤程序 3.1插⼊对话框资源,并与对话框类关联 3.2创建和显⽰ CDialog::DoModal() 3.3关闭 CDialog::OnOk()/OnCancel() 4、使⽤MFC的类创建基于⾮模式对话框的应⽤程序 4.1插⼊对话框资源,并与对话框类关联 4.2创建和显⽰与⼀般框架窗⼝类似 4.3关闭需要程序处理 1)重写OnOK和OnCancle函数,在函数中,调⽤DestroyWindow()函数 2)重写PostNcDestroy()函数,在函数中,delete this; 5、DoModal()函数的执⾏过程 5.1查找和加载对话框资源 5.2将⽗窗⼝设置为不可⽤状态 5.3创建和显⽰对话框 5.4进⼊对话框的消息循环 5.5点击OK/Cancel/关闭按钮时,跳出循环,隐藏对话框窗⼝ 5.6将⽗窗⼝设置为可⽤的和活动的状态 5.7销毁对话框窗⼝ 5.8释放对话框资源 5.9函数执⾏结束,得到DoModal函数的返回值⼆、对话框上的控件操作 对话框的初始化函数:CDialog::OnInitDialog() 1、⽅式⼀:通过调⽤CWnd::GetDlgItem()函数,根据控件ID获取控件对象指针,操作控件即可。

CWnd::GetWindowText--获取控件上显⽰的⽂本 CWnd::SetWindowText--设置控件上显⽰的⽂本 CWnd::GetDlgItemText--获取指定ID的控件上的⽂本,结合了GetDlgItem和GetWindowText的功能 CWnd::SetDlgItemText--设置指定ID的控件上的⽂本 2、⽅式⼆:对话框的数据交换技术(DDX) 将控件和⼀个对话框类的成员变量绑定,可以通过操作成员变量达到操作控件的⽬的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6.4 使用通用对话框在Windows系统中提供了一些通用对话框,如打印设置对话框、页面设置对话框、查找对话框、文件对话框、字体对话框和颜色对话框等。

这些是Windows 系统中出现频率很大的对话框,将它们定义为通用对话框可以极大地减轻程序的复杂度,同时,MFC已经用类封装了这些通用对话框。

一般来讲,要使用通用对话框,不需要派生新的类,因为MFC提供的基类已经提供了常用的功能。

而且在对话框结束后,可以通过成员函数得到用户在对话框中的选择。

6.4.1 文件对话框文件对话框类为打开/保存文件提供了一个方便易用的接口,MFC的CFileD ialog类对其进行了封装。

如图6-24和图6-25所示的就是使用CFileDialog类创建的“打开”和“另存为”对话框。

图6-24 “打开”对话框图6-25 “另存为”对话框创建一个文件对话框对象要先用构造函数进行构造并初始化,然后调用DoM odal()函数来显示对话框,当用户完成对话框中的操作后会自动关闭并返回相应的信息。

CFileDialog类构造函数原型如下:CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_O VERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );其中:—参数bopenFileDialog指定文件对话框的类型。

如果该值为TRUE,则创建文件“打开”对话框;如果为FALSE,则构造一个“另存为”对话框。

—参数lpszDefExt指定默认的文件扩展名,如果用户在对话框的文件名编辑框中不包含扩展名,则lpszDefExt定义的扩展名自动加到文件名后。

默认为NULL,即不添加扩展名。

—参数lpszFileName用于初始化显示在文件名编辑框中的文件名,如果为NULL,则不显示。

—参数dwFlags用于定制对话框的一个或多个标志的组合。

—参数lpszFilter是一组成对的字符串,指定可以打开文件类型的过滤器。

如果指定过滤器,则仅被选择的文件显示于文件列表框中。

CFileDialog类有一个重要的OPENFILENAME类型成员变量m_ofn,该变量提供了对话框的结构信息,可以通过该变量来完成对话框的定制。

6.4.2 “查找和替换”对话框查找和替换对话框可以在应用程序的文本中进行查找、替换操作,MFC的Cf ind ReplaceDialog类对其进行了封装。

图6-26所示就是使用CFindReplaceDialog类创建的“查找”与“替换”对话框。

图6-26 “查找和替换”对话框与其他Windows通用对话框不同是的,查找/替换对话框是非模态对话框,它的创建也与其他Windows通用对话框有区别:必须先使用默认构造函数进行对象的构造,再用new操作符分配存储空间后,调用Create()函数进行初始化,最后以ShowWindow()函数进行显示。

Create()函数原型如下:BOOL Create(BOOL bFindDialogOnly,LPCTSTR lpszFindWhat,LPCTSTR lpszReplaceWith = NULL, DWORD dwFlags = FRDOWN,CWnd*pParentWnd= null);其中:—参数bFindDialogOnly为对话框类型,如果设置为TRUE,显示标准“查找”对话框,如果设置为FALSE,则显示查找/替换对话框。

—参数lpszFindWhat指定要查找的字符串。

—参数lpszReplaceWith指定替换找到的字符串的默认字符串。

—参数dwFlags为标志位,可用一个或多个标志的组合来定制对话框,默认为FR_DOWN,指定查找方向是向下的。

—参数pParentWnd指向对话框的父窗口或所有者窗口,此窗口是接收对话框中查找/替换信息的窗口,如果为NULL,则为调用此对话框主窗口。

为使窗口能响应查找/替换请求,必须在父窗口框架中调用Windows API RegistrWindow Message()函数对其进行注册,并使用ON_REGISTERED_MESSAGE 消息映射宏处理注册的消息。

消息映射完成后,就可以从框架窗口的回调函数中调用CFindReplaceDialo g类成员函数来进行查找替换操作。

6.4.3 “字体”对话框“字体”对话框为应用程序中的字体设置提供了良好的界面,MFC的CFontD ialog类对其进行了封装。

图6-27所示就是使用CFontDialog类创建的“字体”对话框。

图6-27 “字体”对话框“字体”对话框使用CFontDialog类带参数的构造函数进行创建,还函数原型如下:CFontDialog( LPLOGFONT lplfInitial = NULL, DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS, CDC* pdcPrinter = NULL, CWnd* pParentWnd = NUL L );其中:—参数lplfInitial为LOGFONT类型,可以设置打开对话框时的初始化字体属性。

—参数dwFlags指定了选择字体标志组合。

—参数pdcPrinter指向选择字体的打印机设备上下文。

—参数pParentWnd指向字体对话框的父窗口或所有者窗口。

在CFontDialog类中,提供了一个重要的成员变量m_cf,返回时将字体信息保存在该变量中,可以通过它来取得字体信息。

6.4.4 “编辑颜色”对话框“颜色”对话框提供了对颜色的方便选择,用户可以直观地在对话框中选择所需的颜色,也可以创建自定义的颜色。

图6-28显示了标准的“编辑颜色”对话框。

图6-28 “编辑颜色”对话框MFC的CColorDialog类对“颜色”对话框进行了封装,在程序中可以使用带参数的构造函数进行颜色对话框的创建,该函数原型如下:CColorDialog(COLORREF clrInit = 0,DWORD dwFlags = 0,CWnd*pParentWnd = NUL L);其中:—参数clrInit为默认选择的颜色,默认为黑色RGB(0,0,0)。

—参数dwFlags是定制对话框外观的标志。

CColorDialog类提供了一个CHOOSECOLOR结构类型的变量m_cc,来方便用户对颜色对话框进行初始化。

6.4.5 “打印”对话框“打印设置”对话框提供了对打印机接口界面的支持,用户可以通过它来选择已安装的打印机及相关设置。

图6-29给出了标准“打印”对话框。

MFC的CPrintDialog类对“打印设置”对话框进行了封装,在程序中可以使用带参数的构造函数进行“打印设置”对话框的创建,该函数原型如下:CPrintDialog( BOOL bPrintSetupOnly, DWORD dwFlags = PD_ALLPAGES |PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION, CWnd* pParentWnd = NULL );其中:—参数bPrintSetupOnly指定是显示标准的Windows Print对话框还是Print Setup对话框。

设置该参数为TURE,则显示标准Windows Print Setup对话框,如果为FALSE,则显示W indows Print对话框。

图6-29 “打印”对话框—参数dwFlags是用于定制对话框设置的标志。

—参数pPrintWnd是指向对话框的父窗口或主窗口的指针。

CPrintDialog类提供了一个变量m_pd,来存储返回的打印信息。

6.4.6 “页面设置”对话框“页面设置”对话框提供了一个可以方便地设置页面属性的用户界面,可以通过它来设置纸张、页边距、打印方向等,也可以用它来调用“打印设置”对话框。

图6-30给出了标准“页面设置”对话框。

图6-30 “页面设置”对话框MFC的CPageSetupDialog类对“页面设置”对话框进行了封装,在程序中可以使用带参数的构造函数进行“页面设置”对话框的创建,该函数原型如下:CPageSetupDialog(DWORD dwFlags = PSD_MARGINS|PSD_INWININIINTLMEASURE, CWnd* pParentWnd = NULL);其中:—参数dwFlags是用来定制对话框设置的标志。

—参数pParentWnd是指向对话框的父窗口或主窗口的指针。

CPageSetupDialog类提供了一个PAGESETUPDIALOG结构的成员变量m_psd,用户可以通过它来更改打印机设置。

【实例6-3】通用对话框展示光盘路径 /06/ dialog_3/实例目的演示了Windows通用对话框的功能,并使用了定制的文件对话框类,使文件对话框中可以显示当前的系统时间。

1.创建工程在IDE中依次选择“File”→“New”菜单命令,或直接按快捷键“Ctrl +N”,打开“New”对话框。

在“New”对话框中单击“Projects”选项卡,在列表框中选择“MFC Ap pWizard(.exe)”项,在“Project name”文本框中输入“dialog_3”,其他使用默认值,单击“OK”按钮,弹出“MFC AppWizard-Step1”对话框。

在“MFC AppWizard-Step1”对话框中,选中“Dialog based”单选按钮创建一个基于对话框的应用程序框架,其他使用默认值,然后单击“Finish”按钮,在弹出的“New Project Information”对话框中单击“OK”按钮,就可以完成工程的创建。

如图6-31所示。

图6-31 创建一个基于对话框的应用程序框架2.在对话框编辑器中添加按钮选中“取消”按钮,按“Delete”键删除。

同样的删除“在这里设置对话控制”文本。

在对话框中添加7个按钮控件。

在如图6-2所示的客户区右侧浮动的Co ntrol工具栏中的“Button”控件按钮上单击,然后在对话框资源中按下鼠标左键拖动,出现一个按钮,松开鼠标左键,则在对话框资源中出现了一个“Butto n”控件。

如图6-32所示。

3.修改按钮属性4.创建对话框类为实现定制文件对话框,必须派生一个基于CFileDialog类的新类。

单击“Insert”菜单下的“New Class”菜单项,弹出“New Class”对话框将“New Class”对话框设置为:设置“Class type”为“MFC Class”,“Name”为“FileDlgEx”,“Base Class”为“CFileDialog”。

相关文档
最新文档