⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sy02.htm

📁 c语言经典教程
💻 HTM
字号:
<html>
<HEAD>
<TITLE>Visual C++与计算机接口</TITLE>
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=gb2312" > 
</HEAD>
<body>
<H3><a name='01'><font color="#0000FF">对话框、控件的使用</font></a></H3>
<p>
1、对话框的基本概念<br>
  对话框(Dialog)实际上是一个窗口。在MFC中,对话框的功能被封装在了CDialog类中,CDialog类是CWnd类的派生类。<br>
  从MFC编程的角度来看,一个对话框由两部分组成:<br>
  ·对话框模板资源。对话框模板用于指定对话框的控件及其分布,Windows根据对话框模板来创建并显示对话框。<br>
  ·对话框类。对话框类用来实现对话框的功能,由于对话框行使的功能各不相同,因此一般需要从CDialog类派生一个新类,以完成特定的功能。<br>
  相应地,对话框的设计包括对话框模板的设计和对话框类的设计两个主要方面。<br>
  与对话框有关的消息主要包括WM_INITDIALOG消息和控件通知消息。<br>
  在对话框创建时,会收到WM_INITDIALOG消息,对话框对该消息的处理函数是OnInitDialog。OnInitDialog的主要用处是初始化对话框。<br>
  对话框的控件会向对话框发送控件通知消息,以表明控件的状态发生了变化。<br><br>
2、控件的基本概念<br>
  控件(Control)是独立的小部件,在对话框与用户的交互过程中,控件担任着主要角色。<br>
  控件的种类较多,MFC的控件类封装了控件的功能。<br>
  ·CStatic  静态正文(Static Text)显示正文,一般不能接受输入信息。<br>
  ·CStatic  图片(Picture)显式位图、图标、方框和图元文件,一般不能接受输入信息。<br>
  ·CEdit   编辑框(Edit Box)输入并编辑正文,支持单行和多行编辑。<br>
  ·CButton  命令按钮(Pushbutton)响应用户的输入,触发相应的事件。<br>
  ·CButton  检查框(Check Box)用作选择标记,可以有选中、不选中和不确定三种状态。<br>
  ·CButton  单选按钮(Radio Button)用来从两个或多个选项中选中一项。<br>
  ·CButton  组框(Group Box)显示正文和方框,主要用来将相关的一些控件聚成一组。<br>
  ·CListBox  列表框(List Box)显示一个列表,用户可以从该列表中选择一项或多项。<br>
  ·CComboBox 组合框(Combo Box)是一个编辑框和一个列表框的组合。<br>
  ·CScrollBar 滚动条(Scroll Bar)主要用来从一个预定义范围值中迅速而有效地选取一个整数值。<br><br>
  控件实际上都是窗口,所有的控件类都是CWnd类的派生类。<br>
  控件通常是作为对话框的子窗口而创建的,控件也可以出现在视窗口,工具条和状态条中。<br><br>
3、对话框模板的设计<br>
  利用Developer Studio提供的可视化设计工具,用户可以方便地设计对话框模板。<br>
  ·切换至资源视图,选择Insert-Resource命令,并在Insert Resource对话框中双击Dialog项。完成后在资源视图中会出现一个名为IDD_DIALOG1的新的对话框模板资源。<br>
  ·双击IDD_DIALOG1,则会打开该对话框模板的编辑窗口。缺省的对话框模板有OK和Cancel两个按钮。<br>
  ·在窗口的旁边有一个控件面板,在控件面板上用鼠标选择一个控件,然后在对话框中点击,则相应的控件就被放置到了对话框模板中。<br>
  ·如果不能确定控件的类型,可将鼠标在某个控件按钮上停留片刻,则会显示一个工具提示,指出该按钮所代表控件的名称。<br>
  ·当用鼠标选择对话框或控件时,会出现一个围绕它的虚框,拖动虚框的边界可以改变对话框或控件的大小,在状态条中会显示出所选对象的坐标和尺寸。<br>
  ·控件可以被拖动,也可以按箭头键来移动选中的控件。在拖动控件时若按住Ctrl键,则控件会被复制。<br>
  ·用户可以一次选择多个控件,选择的方法有两个:1.在对话框的空白处拖动鼠标,则拖动出来的虚线框内的控件将被选中。2.在选择控件时按住Ctrl键,则可以多重选择。<br>
  ·选中控件或对话框后按回车键,则会弹出一个属性对话框,用来设置控件或对话框的各种属性。<br><br>

  在控件属性对话框的常规属性中,有一些控件共同的属性:<br>
  ·ID属性。用于指定控件的标识符,Windows依靠ID来区分不同的控件。<br>
  ·Caption(标题)属性。静态正文、组框、按钮、检查框、单选按钮等控件可以显示标题,用来对控件进行文字说明。<br>
  ·Visible属性。用来指定控件是否是可见的。<br>
  ·Disable属性。使控件允许或禁止,一个禁止的控件呈灰色显示,不能接收任何输入。<br>
  ·Tabstop属性。用户可以按Tab键移动到具有Tabstop属性的控件上。<br>
  ·Group属性。用来指定一组控件,用户可以用箭头键在该组控件内移动。在同一组内的单选按钮具有互斥的特性,即在这些单选按钮中只能有一个是选中的。如果一个控件具有Group属性,则这个控件以及按Tab顺序紧随其后的所有控件都属于一组的,直到遇到另一个有Group属性的控件为止。<br><br>
4、对话框类的设计<br>
  完成对话框模板的设计后,就需要设计一个对话框类以实现对话框的功能。<br>
  设计对话框类主要包括下面几步:<br>
   ·创建对话框类。该类应从CDialog类派生。<br>
   ·为对话框类加入与控件相对应的成员变量。<br>
   ·为对话框进行初始化工作。<br>
   ·增加对控件通知消息的处理。<br>
<h4>对话框类的创建</h4>
  利用ClassWizard,程序员可以十分方便的创建MFC对话框类。<br>
  打开IDD_COMPUINFO对话框模板,然后按Ctrl+W进入ClassWizard。<br>
  进入ClassWizard后,ClassWizard发现IDD_COMPUINFO是一个新的对话框模板,于是它会询问是否要为IDD_COMPUINFO创建一个对话框类。按OK键确认。<br>
  在Name栏中输入CInfoDlg,在Base class栏中选择CDialog,在Dialog ID栏中选择IDD_COMPUINFO。按Create按钮后,对话框类CInfoDlg即被创建。<br>
  ClassWizard自动使类CInfoDlg与IDD_COMPUINFO模板联系起来。<br>
<h4>为对话框类加入成员变量</h4>
  对话框的主要功能是输出和输入数据。对话框需要有一组成员变量来存储数据。<br>
  在对话框中,控件用来表示或输入数据,因此,存储数据的成员变量应该与控件相对应。<br>
  与控件对应的成员变量即可以是一个数据变量,也可以是一个控件对象,这将由具体需要来确定。<br>
  如果是一个数据变量,则控件可以在CWnd::UpdateData()函数被调用时,与此数据变量进行数据交换。<br>
  如果是一个控件对象,则可以在程序中与控件交互。<br>
  例如,可以为一个编辑框控件指定一个数据变量,这样就可以很方便地取得或设置编辑框控件所代表的数据,如果想对编辑框控件进行控制,则应该为编辑框指定一个CEdit对象,通过CEdit对象,程序员可以控制控件的行为,例如隐藏,Disable等。<br>
  另外,在ClassWizard中可分别为一个控件指定一个数据变量和一个控件对象,这样做的好处是即能方便地获得数据,又能方便地控制控件。<br>
<h4>对话框的初始化</h4>
  对话框的初始化工作一般在构造函数和OnInitDialog函数中完成。<br>
  在构造函数中的初始化主要是针对对话框的数据成员,一般是由ClassWizard自动完成的。<br>
  在对话框创建时,会收到WM_INITDIALOG消息,对话框对该消息的处理函数是OnInitDialog。<br>
  调用OnInitDialog时,对话框已初步创建,对话框的窗口句柄也已有效,但对话框还未被显示出来。因此,可以在OnInitDialog中做一些影响对话框外观的初始化工作。<br>
  OnInitDialog是WM_INITDIALOG消息的处理函数,所以要用ClassWizard为对话框类增加一个WM_INITDIALOG消息的处理函数。<br>
<h4>对话框的数据交换机制</h4>
  对话框的数据成员变量存储了与控件相对应的数据。数据变量需要和控件交换数据,以完成输入或输出功能。<br>
  例如,一个编辑框即可以用来输入,也可以用来输出:用作输入时,用户在其中输入了字符后,对应的数据成员应该更新;用作输出时,应及时刷新编辑框的内容以反映相应数据成员的变化。<br>
  对话框需要一种机制来实现这种数据交换功能,这对对话框来说是至关重要的。<br><br>
  MFC提供了类CDataExchange来实现对话框类与控件之间的数据交换(DDX),该类还提供了数据有效机制(DDV)。数据交换和数据有效机制适用于编辑框、检查框、单选按钮、列表框和组合框。<br>
  数据交换的工作由CDialog::DoDataExchange来完成。<br>
    void CInfoDlg::DoDataExchange(CDataExchange* pDX)<br>
    {<br>
      CDialog::DoDataExchange(pDX);<br>
      //{{AFX_DATA_MAP(CInfoDlg)<br>
      DDX_Control(pDX, IDC_LST_CPU, m_lsCPU);<br>
      DDX_Control(pDX, IDC_CMB_HDD, m_cmbHDD);<br>
      DDX_Check(pDX, IDC_CHK_CDROM, m_bCDROM);<br>
      DDX_Check(pDX, IDC_CHK_FDD, m_bFDD);<br>
      DDX_Check(pDX, IDC_CHK_SND, m_bSND);<br>
      DDX_Text(pDX, IDC_EDT_NO, m_sNo);<br>
      DDX_Radio(pDX, IDC_RAD_HOR, m_nCase);<br>
      DDX_LBString(pDX, IDC_LST_CPU, m_sCPU);<br>
      DDX_CBString(pDX, IDC_CMB_HDD, m_sHDD);<br>
      //}}AFX_DATA_MAP<br>
    }<br>
  该函数中的代码是由ClassWizard自动加入的。DoDataExchange只有一个参数,即一个CDataExchange对象的指针pDX。在该函数中调用了DDX函数来完成数据交换,调用DDV函数来进行数据有效检查。<br>
  当程序需要交换数据时,不要直接调用DoDataExchange函数,而应该调用CWnd::UpdateData()。<br>
  UpdataData函数内部调用了DoDataExchange。该函数只有一个布尔型参数,它决定了数据传送的方向。<br>
  调用UpdateData(TRUE)将数据从对话框的控件中传送到对应的数据成员中,调用UpdateData(FALSE)则将数据从数据成员中传送给对应的控件。<br>
  在缺省的CDialog::OnInitDialog中调用了UpdateData(FALSE),这样,在对话框创建时,数据成员的初值就会反映到相应的控件上。若用户是按了OK(确定)按钮退出对话框,则对话框认为输入有效,就会调用UpdataData(TRUE)将控件中的数据传给数据成员。<br>
<h4>对话框的运行机制</h4>
  在程序中运行模态对话框有两个步骤:<br>
  ·在堆栈上以变量的形式构建一个对话框对象。<br>
  ·调用CDialog::DoModal()。DoModal负责对模态话框的创建和撤销。<br>
    void CTestMsgDoc::OnCompuinfo() <br>
    {<br>
      CInfoDlg dlg;<br>
      if(dlg.DoModal()==IDOK)<br>
      {<br>
      }<br>
    }<br>
  在创建对话框时,DoModal的任务包括载入对话框模板资源、调用OnInitDialog初始化对话框和将对话框显示在屏幕上。<br>
  完成对话框的创建后,DoModal启动一个消息循环,以响应用户的输入。<br>
  由于该消息循环截获了几乎所有的输入消息,使主消息循环收不到对对话框的输入,致使用户只能与模态对话框进行交互,而其它用户界面对象收不到输入信息。<br><br>
  若用户在对话框内点击了ID为IDOK的按钮(通常该按钮的标题是“确定”或“OK”),或按了回车键,则CDialog::OnOK将被调用。<br>
  OnOK首先调用UpdateData(TRUE)将数据从控件传给对话框成员变量,然后调用CDialog::EndDialog关闭对话框。<br>
  关闭对话框后,DoModal会返回值IDOK。<br>
  若用户点击了ID为IDCANCEL的按钮(通常其标题为“取消”或“Cancel”),或按了ESC键,则会导致CDialog::OnCancel的调用。该函数只调用CDialog::EndDialog关闭对话框。<br>
  关闭对话框后,DoModal会返回值IDCANCEL。<br>
  程序根据DoModal的返回值是IDOK还是IDCANCEL就可以判断出用户是确定还是取消了对对话框的操作。<br>
<p></p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -