友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

深入浅出MFC第2版(PDF格式)-第113部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


                   #0001  // PenDlg。h : header file 

                   #0002  // 

                   #0003 

                   #0004  ///////////////////////////////////////////////////////////////// 

                   #0005  // CPenWidthsDlg dialog 

                   #0006 

                   #0007  class CPenWidthsDlg : public CDialog 

                   #0008  { 

                   #0009  // Construction 

                   #0010  public: 

                   #0011          CPenWidthsDlg(CWnd* pParent = NULL);   // standard constructor 

                   #0012 

                   #0013  // Dialog Data 

                   #0014          //{{AFX_DATA(CPenWidthsDlg) 

                   #0015          enum { IDD = IDD_PEN_WIDTHS }; 

                   #0016                  // NOTE: the ClassWizard will add data members here 

                   #0017          //}}AFX_DATA 

                   #0018 

                   #0019 

                   #0020  // Overrides 

                   #0021          // ClassWizard generated virtual function overrides 

                   #0022          //{{AFX_VIRTUAL(CPenWidthsDlg) 

                   #0023          protected: 

                   #0024          virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV suppo 

                   #0025          //}}AFX_VIRTUAL 

                   #0026 

                   #0027  // Implementation 

                   #0028  protected: 

                   #0029 

                   #0030          // Generated message map functions 

                   #0031          //{{AFX_MSG(CPenWidthsDlg) 

                   #0032          afx_msg void OnDefaultPenWidths(); 

                   #0033          //}}AFX_MSG 

                   #0034          DECLARE_MESSAGE_MAP() 

                   #0035  }; 



                   PENDLG。CPP 



                   #0001  // PenDlg。cpp : implementation file 

                   #0002  // 

                   #0003 

                   #0004  #include 〃stdafx。h〃 

                   #0005  #include 〃Scribble。h〃 



610 


…………………………………………………………Page 673……………………………………………………………

                                                                   10      MFC 

                                                                第 章            與對話盒 



#0006  #include 〃PenDlg。h〃 

#0007 

#0008  #ifdef _DEBUG 

#0009  #define new DEBUG_NEW 

#0010  #undef THIS_FILE 

#0011  static char THIS_FILE'' = __FILE__; 

#0012  #endif 

#0013 

#0014  ///////////////////////////////////////////////////////////// 

#0015  // CPenWidthsDlg dialog 

#0016 

#0017 

#0018  CPenWidthsDlg::CPenWidthsDlg(CWnd* pParent /*=NULL*/) 

#0019          : CDialog(CPenWidthsDlg::IDD; pParent) 

#0020  { 

#0021          //{{AFX_DATA_INIT(CPenWidthsDlg) 

#0022              // NOTE: the ClassWizard will add member initialization here 

#0023          //}}AFX_DATA_INIT 

#0024  } 

#0025 

#0026 

#0027  void CPenWidthsDlg::DoDataExchange(CDataExchange* pDX) 

#0028  { 

#0029          CDialog::DoDataExchange(pDX); 

#0030          //{{AFX_DATA_MAP(CPenWidthsDlg) 

#0031                  // NOTE: the ClassWizard will add DDX and DDV calls here 

#0032          //}}AFX_DATA_MAP 

#0033  } 

#0034 

#0035 

#0036  BEGIN_MESSAGE_MAP(CPenWidthsDlg; CDialog) 

#0037          //{{AFX_MSG_MAP(CPenWidthsDlg) 

#0038          ON_BN_CLICKED(IDC_DEFAULT_PEN_WIDTHS; OnDefaultPenWidths) 

#0039          //}}AFX_MSG_MAP 

#0040  END_MESSAGE_MAP() 

#0041 

#0042  /////////////////////////////////////////////////////////////// 

#0043  // CPenWidthsDlg message handlers 

#0044 

#0045  void CPenWidthsDlg::OnDefaultPenWidths() 

#0046  { 

#0047          // TODO: Add your control notification handler code here 

#0048 

#0049  } 



                                                                                               611 


…………………………………………………………Page 674……………………………………………………………

                   第篇    深入  MFC  程式設計 



                   稍早我曾提过,ClassWizard 会为我们做出一个Data Map 。此一Data Map 将放在 



                   DoDataExchange  函数中。目前Data Map 还没有什么内容,CPenWidthsDlg 的Message 



                   Map 也是空的,因为我们还未透过ClassWizard 加料呢。 



                   请注意,CPenWidthsDlg 构造式会先引发基础类别CDialog 的构造式,后者会产生一 



                   个modal 对话框。CDialog 构造式的两个参数分别是对话框ID  以及父窗口指针: 



                   #0018  CPenWidthsDlg::CPenWidthsDlg(CWnd* pParent /*=NULL*/) 

                   #0019          : CDialog(CPenWidthsDlg::IDD; pParent) 

                   #0020  { 

                   #0021          //{{AFX_DATA_INIT(CPenWidthsDlg) 

                   #0022              // NOTE: the ClassWizard will add member initialization here 

                   #0023          //}}AFX_DATA_INIT 

                   #0024  } 



                    ClassWizard 帮我们把CPenWidthsDlg::IDD 塞给第一个参数, 这个值定义于 



                   PENDLG。H  的AFX_DATA  区中,其值为IDD_PEN_ WIDTHS: 



                   #0013  // Dialog Data 

                   #0014          //{{AFX_DATA(CPenWidthsDlg) 

                   #0015          enum { IDD = IDD_PEN_WIDTHS }; 

                   #0016                  // NOTE: the ClassWizard will add data members here 

                   #0017          //}}AFX_DATA 



                   也就是【Pen Widths 】对话框资源的ID : 



                   // in 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 



                   对话框类别CPenWidthsDlg 因此才有办法取得「RC 文件中的对话框资源」。 



612 


…………………………………………………………Page 675……………………………………………………………

                                                     10     MFC 

                                                   第 章       與對話盒 



对话框的消息处理函数 



     CDialog 本就定义有两个按钮【OK 】和【Cancel】,【Pen Widths 】对话框又新增一个 



     【Default 】钮,当使用者按下此钮时,粗笔与细笔都必须回复为预设宽度(分别是5个 



     图素和2个图素)。那么,我们显然有两件工作要完成: 



       1。 在CPenWidthsDlg 中增加两个变量,分别代表粗笔与细笔的宽度。 



       2。 在CPenWidthsDlg 中增加一个函数,负责【Default 】钮被按下后的动作。 



     以下是ClassWizard 的操作步骤(增加一个函数): 



       ■进入ClassWizard,选择【Message Maps】附页,再选择【Class name 】清单中 



         的CPenWidthsDlg 。 



       ■左侧的【Object IDs 】清单列出对话框中各个控制组件的ID 。请选择其中的 



         ID C_DEFAULT_PEN_ WIDTHS  (代表【Default 】钮)。 



       ■在右侧的【Messages 】中选择BN_CLICKED 。这和我们在前两章的经验不同, 



         如今我们处理的是控制组件,它所产生的消息是特别的一类,称为Notification 



         消息,这种消息是控制组件用来通知其父窗口(通常是个对话框)某些状况发 



         生了,例如BN_CLICKED 表示按钮被按下。至于不同的Notification 所代表的 



         意义,画面最下方的〃Description〃 会显示出来。 



       ■按下【Add Function 】钮,接受预设的OnDefaultPenWidths  函数(也可以改名): 



       ■现在,【Member Functions 】清单中出现了新函数,以及它所对映之控制组件 



         与Notification 消息。 



                                                                         613 


…………………………………………………………Page 676……………………………………………………………

                      第篇    深入  MFC  程式設計 



                             

                      按下【Edit Code 】钮,光标落在OnDefaultPenWidths 函数身上,我们看到以 



                        下内容: 



 614 


…………………………………………………………Page 677……………………………………………………………

                                                              10      MFC 

                                                           第 章           與對話盒 



上述动作对源代码造成的影响是: 



// in PENDLG。H 

class CPenWidthsDlg : public CDialog 

{ 

protected: 

        afx_msg void OnDefaultPenWidths(); 

        。。。 

}; 



// in PENDLG。CPP 

BEGIN_MESSAGE_MAP(CPenWidthsDlg; CDialog) 

  ON_BN_CLICKED(IDC_DEFAULT_PEN_WIDTHS; OnDefaultPenWidths) 

END_MESSAGE_MAP() 



void CPenWidthsDlg::OnDefaultPenWidths() 

{ 

   // TODO : Add your control notification handler here 

} 



                        MFC 中各式各样的MAP 



  如果你以为MFC  中只有Message Map 和Data Map ,那你就错了。另外还有一个 



  Dispatch Map ,使用于OLE Automation,下面是其形式: 



DECLARE_DISPATCH_MAP()  //  。H文件中的宏,声明 Dispatch Map 。 



BEGIN_DISPATCH_MAP(CClikDoc; CDocument) // 。CPP 档中的 Dispatch Map 



    //{{AFX_DISPATCH_MAP(CClikDoc) 

    DISP_PROPERTY(CClikDoc; 〃text〃; m_str; VT_BSTR) 

    DISP_PROPERTY_EX(CClikDoc; 〃x〃; GetX; SetX; VT_I2) 

    DISP_PROPERTY_EX(CClikDoc; 〃y〃; GetY; SetY; VT_I2) 

    //}}AFX_DISPATCH_MAP 

END_DISPATCH_MAP() 



 此外还有Event Map ,使用于OLE Custom Control          (也就是OCX ),下面是其形式: 



                                                                                        615 


…………………………………………………………Page 678……………………………………………………………

                  第篇    深入  MFC  程式設計 



                                             档中的宏,声明 Event Map。 

                  DECLARE_EVENT_MAP()  //  。H  



                  BEGIN_EVENT_MAP(CSmileCtrl; COleControl) // 。CPP 档中的 Event Map 

                      //{{AFX_EVENT_MAP(CSmileCtrl) 

                      EVENT_CUSTOM(〃Inside〃; FireInside; VTS_I2  VTS_I2) 

                      EVENT_STOCK_CLICK() 

                      //}}AFX_EVENT_MAP 

                  END_EVENT_MAP() 



                  至于Message Map ,我想你一定已经很熟悉了: 



                  DECLARE_MESSAGE_MAP()// 。H文件中的宏,声明 Message Map 



                  BEGIN_MESSAGE_MAP(CScribDoc; CDocument)    //  。CPP 档中的Message Map 



                      //{{AFX_MSG_MAP(CScribDoc) 

                      ON_MAND(ID_EDIT_CLEAR_ALL; OnEditClearAll) 

                      ON_MAND(ID_PEN_THICK_OR_THIN; OnPenThickOrThin) 

                      ON_MAND(ID_PEN_WIDTHS; OnPenWidths) 

         
返回目录 上一页 下一页 回到顶部 0 0
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!