vc++深入详解学习-NO.7-对话框1
windows中对话框的基本知识:
对话框实际是一个窗口,可以接受消息、移动以及关闭,甚至可以在他的客户区中进行绘图。我们可以将对话框看成是一个大容器,在他上面能够防止各种各样的标准控件和扩展控件,使程序能够支持用户输入的手段更加丰富。
在MFC中,所有的控件类都是由CWnd类派生的,因此,控件实际上也是窗口。所以控件通常是作为对话框的子窗口创建的。另外控件也可以出现在视类窗口、工具栏和状态条中。
控件(control)是独立的小部件,在对话框与用户的交互过程中,担任主要角色。
对话框的种类:有两种类型的对话框:模态(Modal)对话框和非模态(Modeless)对话框。
模态对话框在其显示的时候,程序会暂停执行,直到关闭这个模态对话框,才能继续执行程序中的其他任务。模态对话框垄断了用户的输入,当一个模态对话框打开的时候,用户只能与该对话框进行交互,其他用户界面对象接受不到输入信息。我们平时遇到的大部分对话框都是模态对话框。
非模态对话框显示的时候,允许程序转而执行其他任务,而不用关闭这个对话框。比如记事本中的 “查找”对话框,不会垄断用户输入,用户可以一边查找,一边修改文章,大大方便了使用。
=================
对话框的创建和显示
MFC中都是通过响应的类来关联程序的资源,我们可以为新的对话框资源创建关联的CDialog类来管理这个对话框。
模态对话框的创建:利用CDialog类 的成员函数DoModal。该函数的功能就是创建并显示一个模态对话框,其返回值作为CDialog的另一个成员函数:EndDialog的参数,后者的功能就是关闭模态对话框。
非模态对话框的创建:利用CDialog类的成员函数Create。这个函数有重载的两个声明
BOOL Create(LPCTSTR lpszTemplateName ,CWnd* pParentWnd=NULL);
BOOL Create(UNIT nIDTemplate,CWnd* pParentWnd=NULL);
其第一个参数可以是对话框的资源ID也可以是对话框模板的名称,第二个参数标示了对话框的父窗口,如果是默认值NULL,则此对话框的父窗口就是主应用程序窗口。
Create函数执行完毕创建完非模态对话框之后,还需要调用ShowWindow函数将这个对话框显示出来。
非模态对话框的关闭:对话框的默认按钮IDOK会调用基类CDialog的ONOK函数实现关闭对话框功能,具体ONOK函数调用了EndDialog函数,这个函数用于种植模态对话框,对于非模态对话框,这个函数仅仅是使对话框不可见,并不销毁他,因此对于非模态对话框,如果有一个ID号为IDOK的按钮,我们必须重写OnOk这个虚函数,并在重写的函数中调用DestoryWindow函数以完成销毁对话框的工作,同时注意不要调用基类的OnOk函数。
======================================================================================
if语句中使用逗号表达式。逗号表达式的结果是最后一个表达式的返回值,这里就是指判断字符串是否相等的那条语句的返回值。
静态文本控件在默认状态下是不发送通告消息的,为了使一个静态文本控件能够享有鼠标单击消息,那么需要2个改变:1,改变他的ID,2,在他的属性对话框中选择Notify
----------------------------------------------------------------------------------------------------------------------------------------------------
编辑框控件相关内容:
几种种获取编辑框内容并设置器内容的方法‘
1:GetDlgItem(ID_EDIT)->GetWindowText(str,MAXLEN);
GetDlgItem(ID_EDIT)->SetWindowText(str);
2:GetDlgItemText(ID_EDIT,str,MAXLEN);
SetDlgItemText(ID_EDIT,str);
3:GetDlgItemInt(ID_EDIT); //获取指定控件的文本,并将其转换为一个整形数值。
SetDlgItemInt(ID_EDIT,str);
4:设置编辑框关联一个成员变量 ,DoDataExchange函数内部实现了对话框控件与类成员变量的关联。由于在程序代码中重来不直接调用这个函数,而是通过UpdataData来调用。我们必须调用UpdataData函数来实现间接调用DoDataExchange函数以完成数据交换生效!
DDX--Dialog Data Exchange 对话框数据交换
DDV--Dialog Data Validation 对话框数据校验
5:将编辑框控件与一个控件变量相关联,代表控件本身。利用控件变量访问CWnd的成员函数GetWindowText和SetWindowText两个函数来获取和设置编辑框文本。
6:通过发送消息的方式。::SendMessage(GetDlgItem(ID_EDIT)->m_hwnd,WM_GETTEXT,maxlen,(LPARAM)str);
::SendMessage(GetDlgItem(ID_EDIT)->m_hwnd,WM_SETTEXT,maxlen,(LPARAM)str);
7:直接给对话框的子空间发送消息,使用SendDlgItemMessage。
================