友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第154章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




                          _       _    _ 



604 


…………………………………………………………Page 667……………………………………………………………

                                                10      MFC 

                                              第 章        與對話盒 



■右键选按第一个Static 控制组件,Property page  中出现其属性,现在把文字 



  内容改为〃Thin Pen Width: 〃。以同样的方式把第二个Static 控制组件的文字 



  内容改为〃Thick Pen Width: 〃。不必在意Static 控制组件的ID 值,因为我们 



 根本不可能在程序中用到Static 控制组件的ID 。 



■调整每一个控制组件的大小位置,使之美观整齐。 



■调整tab order 。所谓tab order 是使用者在操作对话框时,按下Tab 键后,键 



  盘输入焦点在各个控制组件上的巡回次序。调整方式是选按Visual C++ 整合环 



  境中的【Layout/Tab Order 】命令项,出现带有标号的对话框如下,再依你所想 



  要的次序以鼠标点选一遍即可。 



 ■测试对话框。选按Visual C++ 整合环境中的【Layout/Test 】命令项,出现运作 



  状态下的对话框。你可以在这种状态下测试tab order 和预设按钮( default 



  button )。若欲退出,请选按【OK 】或【Cancel】或按下ESC 键。 



   注意:所谓default button ,是指与 键相通的那个按钮。 



                                                                     605 


…………………………………………………………Page 668……………………………………………………………

                 第篇    深入  MFC  程式設計 



                 所有调整都完成之后,存盘。于是SCRIBBLE。RC 增加了下列内容(一个对话框模板): 



                 IDD_PEN_WIDTHS DIALOG DISCARDABLE  0; 0; 203; 65 

                 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU 

                 CAPTION 〃Pen Widths〃 

                 FONT 8; 〃MS Sans Serif〃 

                 BEGIN 

                     DEFPUSHBUTTON   〃OK〃;IDOK;148;7;50;14 

                     PUSHBUTTON        〃Cancel〃;IDCANCEL;148;24;50;14 

                     PUSHBUTTON        〃Default〃;IDC_DEFAULT_PEN_WIDTHS;148;41;50;14 

                     LTEXT            〃Thin Pen Width:〃;IDC_STATIC;10;12;70;10 

                     LTEXT            〃Thick Pen Width:〃;IDC_STATIC;10;33;70;10 

                     EDITTEXT          IDC_THIN_PEN_WIDTH;86;12;40;13;ES_AUTOHSCROLL 

                     EDITTEXT          IDC_THICK_PEN_WIDTH;86;33;40;13;ES_AUTOHSCROLL 

                 END 



           利用ClassWizard 连接对话框与其专属类别 



                 一旦完成了对话框的外貌设计,再来就是设计其行为。我们有两件事要做: 



                   1。 从MFC  的CDialog 中衍生出一个类别,用来负责对话框行为。 



                   2。 利用ClassWizard 把这个类别和先前你产生的对话框资源连接起来。通常这意 



                     味着你必须声明某些函数,用以处理你感兴趣的对话框消息,并将对话框中的 



                     控制组件对应到类别的成员变量上,这也就是所谓的Dialog Data eXchange 



                      (DDX )。如果你对这些变量内容有任何「确认规则」的话,ClassWizard 也 



                     允许你设定之,这就是所谓的Dialog Data Validation      (DDV) 。 



                     注意:所谓「确认规则」是指对某些特殊用途的变量进行内容查验工作。例如月份 



                     一定只可能在1~12 之间,日期一定只可能在1~31 之间,人名一定不会有数字夹 



                     杂其中,金钱数额不能夹带文字,新竹的电话号码必须是03 开头后面再加7位数。。。 



                     等等等。 



606 


…………………………………………………………Page 669……………………………………………………………

                                                                10      MFC 

                                                             第 章           與對話盒 



所有动作当然都可以手工完成,然而ClassWizard 的表现非常好,让我们快速又轻松地 



完成这些事样。它可以为你的对话框产生一个。H 档,一个。CPP 文件,内有你的对话框 



类别、函数骨干、一个Message Map 、以及一个Data Map 。哎呀,我们又看到了新东西, 



稍后我会解释所谓的Data Map 。 



回忆Scribble 诞生之初,程序中有一个About 对话框,寄生于SCRIBBLE。CPP 中。 



AppWizard 并没有询问我们有关这个对话框的任何意见,就自作主张地放了这些码: 



 #0001  ///////////////////////////////////////////////////////////////// 

 #0002  // CAboutDlg dialog used for App About 

 #0003 

 #0004  class CAboutDlg : public CDialog 

 #0005  { 

 #0006  public: 

 #0007          CAboutDlg(); 

 #0008 

 #0009  // Dialog Data 

 #0010          //{{AFX_DATA(CAboutDlg) 

 #0011          enum { IDD = IDD_ABOUTBOX }; 

 #0012          //}}AFX_DATA 

 #0013 

 #0014          // ClassWizard generated virtual function overrides 

 #0015          //{{AFX_VIRTUAL(CAboutDlg) 

 #0016          protected: 

 #0017          virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 

 #0018          //}}AFX_VIRTUAL 

 #0019 

 #0020  // Implementation 

 #0021  protected: 

 #0022          //{{AFX_MSG(CAboutDlg) 

 #0023                  // No message handlers 

 #0024          //}}AFX_MSG 

 #0025          DECLARE_MESSAGE_MAP() 

 #0026  }; 

 #0027 

 #0028  CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 

 #0029  { 

 #0030          //{{AFX_DATA_INIT(CAboutDlg) 

 #0031          //}}AFX_DATA_INIT 

 #0032  } 

 #0033 

 #0034  void CAboutDlg::DoDataExchange(CDataExchange* pDX) 



                                                                                          607 


…………………………………………………………Page 670……………………………………………………………

                   第篇    深入  MFC  程式設計 



                   #0035  { 

                   #0036          CDialog::DoDataExchange(pDX); 

                   #0037          //{{AFX_DATA_MAP(CAboutDlg) 

                   #0038          //}}AFX_DATA_MAP 

                   #0039  } 

                   #0040 

                   #0041  BEGIN_MESSAGE_MAP(CAboutDlg; CDialog) 

                   #0042          //{{AFX_MSG_MAP(CAboutDlg) 

                   #0043                  // No message handlers 

                   #0044          //}}AFX_MSG_MAP 

                   #0045  END_MESSAGE_MAP() 

                   #0046 

                   #0047  // App mand to run the dialog 

                   #0048  void CScribbleApp::OnAppAbout() 

                   #0049  { 

                   #0050          CAboutDlg aboutDlg; 

                   #0051          aboutDlg。DoModal(); 

                   #0052  } 



                   CAboutDlg 虽然衍生自CDialog,但太简陋,不符合我们新增的这个【Pen Width】对话 



                   框所需,所以我们首先必须另为【Pen Width】对话框产生一个类别,以负责其行径。步 



                   骤如下: 



                     接续刚才完成对话框模板的动作,选按整合环境的【View/ClassWizard 】命令项 



                     (或是直接在对话框模板上快按两下),进入ClassWizard 。这时候【Adding a 



                     Class 】对话框会出现,并以刚才的IDD_PEN_ WIDTHS 为新资源,这是因为 



                     ClassWizard 知道你已在对话框编辑器中设计了一个对话框模板,却还未设计 



                     其对应类别(整合环境就是这么便利)。好,按下【OK 】。 



608 


…………………………………………………………Page 671……………………………………………………………

                                                 10     MFC 

                                              第 章        與對話盒 



  在【Create New Class 】对话框中设计新类别。键入〃CPenWidthsDlg〃 做为类别 



 名称。请注意类别的基础类型为CDialog,因为ClassWizard 知道目前是由对 



 话盒编辑器过来: 



  ClassWizard 把类别名称再加上。cpp 和。h,作为预设档名。毫无问题,因为 



  Windows 95 和Windows NT 都支持长档名。如果你不喜欢,按下上图右侧的 



   【Change 】钮去改它。本例改用PENDLG。CPP 和PENDLG。H 两个档名。 



  按下上图的【OK 】钮,于是类别产生,回到ClassWizard 画面。 



 这样,我们就进账了两个新文件: 



                                                                     609 


…………………………………………………………Page 672……………………………………………………………

                   第篇    深入  MFC  程式設計 



                   PENDLG。H 



                   #0001  // PenDlg。h : header file 

                   #0002  // 

                   #0003 

                   #000
返回目录 上一页 下一页 回到顶部 0 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!