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

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

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




                                            松 

                                            崗 

                                            圖 

                                            書 

                                             公 

                                            司 

                                            出 

                                            版 



                          2nd Edition 

    深入湷鯩FC   



此外我也修改RC 文件中的一些字符串,使它们呈现中文: 



 IDD_TIP DIALOG DISCARDABLE  0; 0; 231; 164 

 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU 

CAPTION 〃今日小秘訣〃 

FONT 8; 〃MS Sans Serif〃 

BEGIN 

    CONTROL           〃〃;…1;〃Static〃;SS_BLACKFRAME;12;11;207;123 

    LTEXT             〃Some String〃;IDC_TIPSTRING;28;63;177;60 

    CONTROL           〃程式啟動時顯示小秘訣〃;IDC_STARTUP;〃Button〃; 

                      BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP;13;146;85;10 

    PUSHBUTTON       〃個小秘訣〃;IDC_NEXTTIP;109;143;50;14;WS_GROUP 

    DEFPUSHBUTTON    〃關椋Аǎ籌DOK;168;143;50;14;WS_GROUP 

    CONTROL           〃〃;IDC_BULB;〃Static〃;SS_BITMAP;20;17;190;111 

END 



 STRINGTABLE DISCARDABLE 

BEGIN 

 。。。 

 //  CG_IDS_DIDYOUKNOW       〃Did You Know。。。〃 

    CG_IDS_DIDYOUKNOW       〃侯俊傑著作年表。。。〃 

END 



                                                                                       819 


…………………………………………………………Page 882……………………………………………………………

                  第篇    深入  MFC  程式設計 



               增加一个TIPS。TXT 



                  这很简单,使用任何一种文字编辑工具,遵循前面说过的TIPS。TXT 文件格式,做出你 



                  的每日小秘诀。 



               修改RC 文件中的About 对话窗画面 



                  我增加了四个static 控制组件,其中两个做为卷标使用,不必在乎其ID 。另两个准备给 



                  Test 程序在【About  】对话窗出现时设定系统信息使用, ID 分别设定为 



                  IDC_PHYSICAL_MEM 和IDC_DISK_SPACE ,配合System Info for About Dlg 组件的建 



                  议。 



          TEST。CPP 



                  在CAboutDlg::OnInitDialog 中利用SetDlgItemText 设定稍早我们为对话窗画面新增的 



                  两个static 控制组件的文字内容(ponent Gallery 已经为我们做出这段程序代码,只是 



                  暂时把它标记为说明文字。我只要把标记符号// 去除即可): 



                  BOOL CAboutDlg::OnInitDialog() 

                  { 

                          。。。 

                          SetDlgItemText(IDC_PHYSICAL_MEM; strFreeMemory); 

                          。。。 

                          SetDlgItemText(IDC_DISK_SPACE; strFreeDiskSpace); 

                      } 

                      return TRUE;    // CG:  This was added by System Info ponent。 

                  } 



820 


…………………………………………………………Page 883……………………………………………………………

                           16                     ponents & ActiveX Controls 

                         第 章 站眾的肩膀 使用 



Test 修改结果 



     一切尽如人意。现在我们有了理想的Splash Screen 画面如前所述,也有了Tips of the 



     Day 对话窗: 



     以及一个内含系统信息的About 对话窗: 



                                                                               821 


…………………………………………………………Page 884……………………………………………………………

                第篇    深入  MFC  程式設計 



         使用ActiveX Controls 



                Microsoft  的Visual Basic  自1991 年推出以来,已经成为Windows 应用软件开发环境 



                中的佼佼者。它的成功极大部份要归功于其开放性质:它所提供的VBXs 被认为是一种 



                极佳的对象导向程序设计架构。VBX 是一种动态联结函数库(DLL ),类似Windows  的 



                订制型控制组件(custom control )。 



                VBX 不适用于32 位环境。于是Microsoft 再推出另一规格OCX 。不论是VBX 或 



                OCX ,或甚至Borland  的VCL,都提供Properties…Method…Event  (PME)接口。Visual Basic 



                之于VBX ,以及Borland C++ Builder 和Delphi 之于VCL,都提供了整合开发环境 



                 (IDE)与PME 接口之间的极密切结合,使得程序设计更进一步到达「以拖拉、填单等 



                简易动作就能够完成」的可视化境界。也因此没有人会反对把Visual Basic 和Delphi 和 



                C++ Builder 归类为RAD (Rapid Application Development ,快速软件开发工具)的行列。 



                但是Visual C++ 之于OCX ,还没能够有这么好的整合。 



                我怎么会谈到OCX 呢?本节不是ActiveX Control  吗?噢,OCX 就是ActiveX 



                Control !由于微软把它所有的Internet 技术都称为ActiveX ,所以OLE Controls 就变成 



                了ActiveX Controls 。 



                我不打算讨论ActiveX Control  的撰写,我打算把全部篇幅用到ActiveX Control  的使用 



                上。 



                 如果对ActiveX Control  的开发感兴趣,Adam Denning  的ActiveX Control Inside Out 是 



                 一本很不错的书(ActiveX 控制组件彻底研究,侯俊杰译/ 松岗) 



822 


…………………………………………………………Page 885……………………………………………………………

                             16                            ponents & ActiveX Controls 

                          第 章 站眾的肩膀 使用 



ActiveX Control   基础观念:Properties  、Methods、Event 



 你必须了解ActiveX Control 三种接口的意义,并且充份了解你打算使用的某个ActiveX 



 Control 有些什么特殊的接口,然后才能够使用它。 



 基本上你可以拿你已经很熟悉的C++ 类别来比较ActiveX control 。类别也是一个包装良 



 好的组件,有它自己的成员变量,以及处理这些成员变量的所谓成员函数,是个自给自 



 足的体系。ActiveX control  的三个接口也有类似性质: 



  ■  property 相当于C++ 类别的成员变量 



  ■  method 相当于C++ 类别的成员函数 



  ■  event 相当于Windows 控制组件发出的notification 消息 



 ActiveX Control 规格中定有一些标准的(库存的)接口,例如BackColor 和FontName 



 等properties ,AddItem  和Move 和Refresh 等methods ,以及CLICK 和KEYDOWN 等 



 events 。也就是说,任何一个ActiveX Control 大致上都会有一些必备的、基础的性质和 



 能力。 



 以下针对ActiveX Control  的三种接口与C++ 类别做个比较。至于它们的具体展现以及 



 如何使用,稍后在实例中可以看到。 



                                         CObject 

                                          CObject 



                                     CCmdTarget 

                                     CCmdTarget 



                                           CWnd 

                                           CWnd 



                                               CButton 

                                               CButton 



                                                CEdit 

                                                CEdit 



                                               CListBox 

                                               CListBox 



                                             COleControl 

                                              COleControl 



                                       。。。 



                                                                                                823 


…………………………………………………………Page 886……………………………………………………………

                  第篇    深入  MFC  程式設計 



              methods 



                  设计自己的C++ 类别,你当然可以在其中设计成员函数。此一函数之调用者必须在编 



                  译时期知道这一函数的功能以及它的参数。搭配Windows  内建之控制组件(如Edit 、 



                  Button )而设计的类别(如CEdit、CButton),内部固定会设计一些成员函数。某些成 



                  员函数(如CEdit::GetLineCount)只适用于特定类别,但某些根类别的成员函数(例如 



                  CWnd::GetDlgItemText)则适用于所有的子类别。 



                  ActiveX Control  的method 极类似C++ 类别中的成员函数。但它们被限制在一个有限 



                  的集合之中,集合内的名单包括AddItem 、RemoveItem 、Move 和Refresh 等等。并不是 



                  所有的ActiveX Controls 都对每一个method 产生反应,例如Move 就不能够在每一个 



                  ActiveX Control  中运作自如。 



              properties 



                  基本上properties 用来表达ActiveX Control  的属性或数据。一个名为Date  的组件可能 



                  会定义一个所谓的DateValue ,内放日期,这就表现了组件的资料。它还可能定义一个 



                  所谓的DateFormat ,允许使用者取得或设定日期表现形式,这就表现了组件的属性。 



                  你可以说ActiveX Control  的properties 相当于C++ 类别的成员变量。每一个ActiveX 



                  Control 可以定义属于它自己的properties ,可以是一个字符串,可以是一个长整数,也可 



                  以是一个浮点数。有一组所谓的properties 标准集合(被称为stock properties ),内含 



                  BackColor 、FontName、Caption 等等properties ,是每个ActiveX control 都会拥有的。 



                  一般而言properties 可分为四种类型: 



                    ■  Ambient properties 



                    ■  Extended properties 



                    ■  Stock properties 



                    ■  Custom properties 



824 


…………………………………………………………Page 887……………………………………………………………

                              16                     ponents & ActiveX Controls 

                           第 章 站眾的肩膀 使用 



  events 



      Windows 控制组件以所谓的notification    (通告)消息送给其父窗口(通常是对话窗), 



      例如按钮组件可能传送出一个BN_CLICKED 。ActiveX Control 使用完全相同的方法,不 



      过现在notification 消息被称为event ,用来表示某种状况发生了。Events  的发射可以使 



      ActiveX Control 有能力通知其宿主(container,也就是VB 或VC 程序),于是对方有 



      机会处理。大部份ActiveX Controls 送出标准的events,例如CLICK、KEYDOWN 、KEYUP 



      等等,某些ActiveX Controls 会送出独一无二的消息(例如ROWCOLCHANGE )。 



      一般而言events 可分为两种类型: 



       ■  Stock events 



       ■  Custom events 



ActiveX Controls的五大使用步骤 



      欲在程序中加上ActiveX Controls ,基本上需要五个步骤: 



      1。 建立新项目时,在AppWizard  的步骤3中选择【ActiveX Controls 】。这会 



      使程序代码多出一行: 



        BOOL COcxTestApp::InitInstance() 



        { 



          AfxEnableControlContainer(); 



          。。。 



        } 



      2。 进入ponent Gallery ,把ActiveX Controls 安插到你的程序中。 



      3。 使用ActiveX Controls 。通常我们在对话窗中使用它。我们可以把资源编辑器 



      的工具箱里头的ActiveX Controls 拖放到目标对话窗中。 



      4。 利用ClassWizard 产生对话窗类别,并处理相关的Message Maps、消息处理 



      例程、变量定义、对话框函数等等。 



      5。 编译联结。 



                                                                                    825 


…………………………………………………………Page 888……………………………………………………………

              第篇    深入  MFC  程式設計 



              我将以系统内建(已注册过)的Grid ActiveX Control 做为示范的对象。Grid 具有小型 



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