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。

================

   

 

posted @ 2013-08-08 22:12  veonm  阅读(408)  评论(0编辑  收藏  举报