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

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

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




                   第篇    深入  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  程式設計 



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