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

VC语言6.0程序设计从入门到精通-第32部分

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


个选项卡,可以显示图标、标签或两者都显示。  

    另外,每个选项卡项可以有 3 种可能的状态:已按下、非按下或突出显示 。该状态仅能 

通过修改现有选项卡项来设置 。若要修改现有选项卡项,应调用 GetItem()函数检索它,修改 

TCITEM 结构(特别是 dwState 和 dwStateMask 数据成员),然后通过调用 SetItem 返回修改 

过的 TCITEM 结构。若要清除 CTabCtrl 对象中所有选项卡项的项状态,应调用 DeselectAll() 

函数。该函数重新设置所有选项卡项或所有项的状态(当前选定的项除外)。  

    下列代码清除所有选项卡项的状态,然后修改第三项的状态:  



    //modify the third item to be highlighted  



    TCITEM curItem;  



    m_tabCtrl。DeselectAll(FALSE); //reset all tab items  



    curItem。mask= TCIF_STATE;  



    m_tabCtrl。GetItem(2; &curItem);  



    curItem。mask= TCIF_STATE;  



    curItem。dwState= TCIS_HIGHLIGHTED;  



    curItem。dwStateMask= TCIS_HIGHLIGHTED;  



    m_tabCtrl。SetItem(2; &curItem);  



5。10。2    选项卡控件通知消息  



    当单击选项卡或按钮时,选项卡(TabControl )控件(CTabCtrl )向其父窗口发送通知消 

息。如果要进行某种响应,应对这些消息进行处理。例如,当单击选项卡时,也许想在显示 

选项卡之前在页面上预设控件数据,即响应单击选项卡消息时作出预设数据的响应。  

    处理来自视图或对话框类中的选项卡(TabControl )控件的 WM_NOTIFY 消息,用“属 

性”窗口创建带 switch 语句的 OnChildNotify()处理函数。选项卡控件向父窗口发送的主要通 

知消息如表 5…25 所示。  



 ·142 ·  


…………………………………………………………Page 152……………………………………………………………

                                                                                 第 5 章    常用控件  



     表 5…25                            选项卡控件的通知消息  



          通知消息                                               含义  

 NM_CLICK                    通知父窗口用户在控件区域范围内点击了鼠标左键  

 NM_RCLICK                   通知父窗口用户在控件区域范围内点击了鼠标右键  

 NM_RELEASEDCAPTURE          通知父窗口在控件区域范围内释放鼠标捕获消息  

 TCN_FOCUSCHANGE             通知父窗口控件的按钮聚焦已经改变  

 TCN_GETOBJECT                当具有 TCS_EX_REGISTERDROP 扩展特性时并且对象被拖动的通知消息  

 TCN_KEYDOWN                 通知父窗口在控件范围内键盘被按下  

 TCN_SELCHANGE               通知父窗口控件的选项卡选择项已经改变  

 TCN_SELCHANGING             通知父窗口控件的选项卡选择项正在改变  



     选项卡控件还涉及到一些重要的数据结构,这些预定义的数据结构在该控件应用中起着 

重要作用。主要涉及到的的结构如下。  



     1.NMTCKEYDOWN 结构  



     该结构包含键盘按下时的相关信息,主要用于处理 TCN_KEYDOWN 通知消息,该结构 

定义如下:  



     typedef struct tagNMTCKEYDOWN {  



             NMHDR hdr;  



             WORD wVKey;  



             UINT flags;  



     } NMTCKEYDOWN  



     2 .TCHITTESTINFO 结构  



     该结构主要用于鼠标单击测试的通知消息,定义如下:  



     typedef struct tagTCHITTESTINFO {  



             POINT pt;  



             UINT flags;  



     } TCHITTESTINFO; *LPTCHITTESTINFO;  



     3 .TCITEM 结构  



     该结构指定选项卡控件选项的具体属性,定义如下:  



     typedef struct tagTCITEM {      



             UINT mask;  



     #if (_WIN32_IE 》= 0x0300)  



             DWORD dwState;  



             DWORD dwStateMask;  



     #else  



             UINT lpReserved1;  



             UINT lpReserved2;  



     #endif  



             LPTSTR pszText;  



                                                                                            ·143 ·  


…………………………………………………………Page 153……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



              int cchTextMax;  



              int iImage;  



              LPARAM lParam;  



      } TCITEM; *LPTCITEM;  



      4 .TCITEMHEADER 结构  



      该结构用于指定或接收选项卡控件本身的属性,定义如下:  



      typedef struct tagTCITEMHEADER {  



              UINT mask;  



              UINT lpReserved1;  



              UINT lpReserved2;  



              LPTSTR pszText;  



              int cchTextMax;  



              int iImage;  



      } TCITEMHEADER; *LPTCITEMHEADER;  



      此外 CTabCtrl 还提供了一些函数用于得到和修改控件的状态:  



      int GetCurSel()/int SetCurSel(int nItem);//用于得到/设置当前被选中的页位置  



      BOOL DeleteItem(int nItem)/BOOL DeleteAllItems();//用于删除指定/所有页面  



      void RemoveImage(int nImage);//用于删除某页选择位置上的图标  



      在当前页发生改变时需要隐藏当前的一些子窗口,并显示其他的子窗口。下面的代码演 

示了如何实现上述功能,主要的代码如下:  



      CParentWnd::OnCreate(。。。)    



      {  



            m_tab。Create(。。。);    



            m_tab。InsertItem(0;〃Option 1〃);  



            m_tab。InsertItem(1;〃Option 2〃);  



            Create a edit box as the m_tab’s Child    



            Create a static box as the m_tab’s Child    



            edit_box。ShowWindow(SW_SHOW); // edit box 在属性页的第一页    



            static_box。ShowWindow(SW_HIDE); // static box 在属性页的第二页    



      }    



      void CParentWnd::OnSelectChangeTab(NMHDR* pNMHDR; LRESULT* pResult)    



      {  



            //处理页选择改变后的消息      



            if(m_tab。GetCurSel()==0)    



            {//根据当前页显示/ 隐藏不同的子窗口  



                  edit_box。ShowWindow(SW_SHOW);  



                  static_box。ShowWindow(SW_HIDE);  



            }    



            else    



 ·144 ·  


…………………………………………………………Page 154……………………………………………………………

                                                                 第 5 章    常用控件  



        {//    



            edit_box。ShowWindow(SW_HIDE);  



            static_box。ShowWindow(SW_SHOW);  



        }    



    }  



    技巧:获取对话框中控件的窗口指针并进行一些常用的操作  



         对于对话框中的控件,实际上是对话框的一个子窗口。在实际编程中,可能常常会对控件 



         进行一些操作,得到该控件窗口的指针是第一步,通过 CWnd::GetDlgItem 可以很方便地得 



         到控件窗口的指针。假设某对话框上有一个 ID 为 IDC_XXX_STATIC 的静态文本控件,可 



         以通过下面这行代码重新设置文本内容:  



         GetDlgItem(IDC_XXX_STATIC)…》SetWindowText(…)  



         对于其他操作窗口的常用操作,也可以通过 GetDlgItem 传回的指针来调用对应的窗口操作 



         函数来完成。  



5。11    本章小结  



    本章对  MFC    编程中常常用到的控件进行了介绍,包括传统的  Windows                     控件和新型的 

Win32 控件。在传统控件中主要介绍了静态文本控件、文本编辑控件、滚动条控件、按钮控 

件(包括命令按钮、单选按钮、复选按钮)、列表框控件、组合框控件、图片控件等。在新型 

控件中主要介绍了列表控件、树状控件、选项卡控件。本章对这些控件本身的特性、使用方 

法以及主要的成员函数进行了介绍,掌握这些控件的使用方法是构建 Windows 应用程序的前 

提条件,因为在用户界面程序设计中是离不开控件的使用的。  

    关于控件的创建和使用总结起来的要点如下。  

    o  传统控件的通知消息一般是通过 WM_MAND 消息发给父窗口的,Win32 控件的 

      通知消息则是通过 WM_NOTIFY 消息发送的,该消息可以附带大量信息。  

    o   由于所有的控件都是子窗口,所有的控件类都是  CWnd                     类的派生类。因此可以用 

      ShowWindow、EnableWindow 和 MoveWindow 这样的 CWnd 成员函数来控制控件。  

    o  控件的创建有自动和手工两种常用方法。  控件的自动创建是通过向对话框模板中添加 

      控件实现的。手工创建则需要构建一个控件对象并调用相应的 Create 函数。  

    o  访问控件的方法包括:通过对话框的数据交换功能来查询和设置控件;通过控件对象 

      来访问控件;利用 CWnd 类的一些用于管理控件的成员函数来访问控件。  

    虽然本章对各种控件的功能和使用方法有一个较为全面的介绍,但是读者在具体使用某 

个控件时可能还会有更多自己的功能需求,这时可以通过 Visual  C++ 的联机帮助获得更多的 

与该控件相关的帮助信息。  

      



                                                                         ·145 ·  


…………………………………………………………Page 155……………………………………………………………

               第 6 章    文本和字体类  

               第 6 章    文本和字体类  



   Windows 经常使用 GDI 进行文本和图形输出。实际上,文本和图形并没有明显的界限, 

         Windows 把文本当作一种特殊的图形来对待,即,文本被看作是按照指定的“字 

在很多时候, 

体”格式画出来的。字体用于描述字符集中每一个字母、数字和标点符号的形状及外表的特 

殊信息。  

   本章将对字体类 Cfont 及文本的输出过程进行介绍。  



6。1    基础知识介绍  



   当任何窗口被第一次建立时,它假定是使用默认的系统字体。事实上,除非另外指定, 

默认字体也就是系统字体 。使用字体的方法很简单,主要是通过 WM_GETFONT 消息或者函 

数 CreateFont()取得字体。消息 WM_GETFONT 经常被发送到窗口以确定字体的类型,该字 

体可能在它的窗口中作为默认值 。此消息返回字体句柄或者空(如果正使用系统字体)。系统 

字体的实际句柄可由调用 GetStockObject(SYSTEM_FONT)得到。  

   在绘制文本时,不仅需要考虑描绘文本在窗口中使用的颜色,还应考虑文本的背景颜色 

和文本描绘“模式 ”,表 6…1 所示为控制颜色和描绘文本模式所需的函数。  



   表 6…1                 控制颜色和模式的函数  



      函数                              描述  

 GetBkColor()   传递显示描述表时,返回 COLORREF 值指示描绘文本时使用的背景色  

 SetBkColor()   传递显示描述表和 COLORREF 值,设置绘制文本的背景颜色  

 GetTextColor()  传递显示描述表时,返回 COLORREF 值,指示绘制文本的颜色  

 SetTextColor()  传递显示描述表和 COLORREF 时,为绘制的文本设置颜色  

 GetBkMode()    传递显示描述表时,返回绘画方式,可以是 OPAQUE 或者 TRANSPARENT  

 SetBkMode()    传递显示措述表和 OPAQUE 或 TRANSPARENT 参数时设置背景文本绘制方式  



6。2    CFont 类  



6。2。1    概述  



   CFont 类封装了一个 Windows  图形设备接口(GDI )字体并提供管理字体的成员函数。 

为使用 Cfont 类,可构造一个 CFont 对象并用 CreatFont()、CreateFontIndirect()、CreatePointFont() 

或 CreatePointFontIndirect()将一个 Windows 字体附加给对象,然后用对象的成员函数操纵字 

体。使用  CreatePointFont()和  CreatePointFontIndirect()常比使用  CreateFontIndirect()更容易, 


…………………………………………………………Page 156……………………………………………………………

                                                                                      第 6 章    文本和字体类  



因为前者可自动将字体高度的单位从点转换为逻辑单位。CFont 类在 MFC 类库中的继承关系 

如图 6…1 所示。  



                                                                           



                                   图 6…1    CFont 类在 MFC 类库中的位置  



6。2。2    主要成员函数  



     CFont  类中封装了与字体集相关的成员函数,通过这些成员函数可以方便地设置文本输 

出的字体。Cfont 类中的主要成员函数如表 6…2 所示。  



      表 6…2                                Cfont 类中的成员函数  



          成员                                                     作用  

 CFont                     构造一个 CFont 对象初始化  

 CreateFontIndirect        初始化一个由 LOGFONT 结构给出其特征的 CFont  对象  

 CreateFont                初始化用指定特性定义的 CFont 对象  

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