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

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

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



重现。函数的功能、函数名,甚至函数的参数都是类似的。为了方便学习,下面在介绍 

CboBox 类的成员函数时,采用了与对应的 CEdit 或 CListBox 成员函数相比较的做法。 

在成员函数的列表中,分别列出了成员函数名、对应的 CEdit 或 CListBox 成员函数以及二者 

之间的不同之处。  

    针对编辑框组件的主要成员函数如表 5…14 所示。该表的前 3 个函数实际上是 CWnd 类的 

成员函数,可用来查询和设置编辑框组件。  



    表 5…14             针对编辑框组件的 CboBox 成员函数  



         成员函数名               对应的 CEdit 成员函数        与 CEdit 成员函数的不同之处  

 CWnd::GetWindowText      CWnd::GetWindowText     无  

 CWnd::SetWindowText      CWnd::SetWindowText     无  

 CWnd::GetWindowTextLength  CWnd::GetWindowTextLength  无  

 GetEditSel               GetSel                  仅函数名不同  

 SetEditSel               SetSel                  函数名不同,且无 bNoScroll 参数  

 Clear                    Clear                   无  



 ·124 ·  


…………………………………………………………Page 134……………………………………………………………

                                                                               第 5 章    常用控件  



                                                                                       续表  



           成员函数名                      对应的 CEdit 成员函数              与 CEdit 成员函数的不同之处  

 Copy                             Copy                           无  

 Cut                              Cut                            无  

 Paste                            Paste                          无  



     与 CListBox 的成员函数类似,针对列表框组件的 CboBox 成员函数也可以分为 3 类。 

表 5…15 列出了用于插入和删除列表项的成员函数,表 5…16 列出了用于搜索、查询和设置列 

表框的成员函数,与列表项的选择有关的成员函数如表 5…17 所示。需要指出的是,如果这些 

函数出错,则返回 CB_ERR,而不是 LB_ERR 。另外,排序的组合框具有的是 CBS_SORT 风 

格,而不是 LBS_SORT 。  



     表 5…15               用于插入和删除列表项的 CboBox 成员函数  



           成员函数名                    对应的 CListBox 成员函数             与 CEdit 成员函数的不同之处  

 AddString                       AddString                      无  

 InsertString                    InsertString                   无  

 DeleteString                    DeleteString                   无  

 ResetContent                    ResetContent                   无  

 Dir                             Dir                            无  



     表 5…16            用于搜索、查询和设置列表框的 CboBox 成员函数  



           成员函数名                    对应的 CListBox 成员函数             与 CEdit 成员函数的不同之处  

 GetCount                        GetCount                       无  

 FindString                      FindString                     无  

 GetLBText                       GetText                        仅函数名不同  

 GetLBTextLen                    GetTextLen                     仅函数名不同  

 GetItemData                     GetItemData                    无  

 SetItemData                     SetItemData                    无  

 GetTopIndex                     GetTopIndex                    无  

 SetTopIndex                     SetTopIndex                    无  



       



     表 5…17                与列表项的选择有关的 CboBox 成员函数  



           成员函数名                    对应的 CListBox 成员函数             与 CEdit 成员函数的不同之处  

 GetCurSel                       GetCurSel                      无  

                                                                新选的列表项的内容会被拷贝到 

 SetCurSel                       SetCurSel  

                                                                编辑框组件中  

                                                                新选的列表项的内容会被拷贝到 

 SelectString                    SelectString  

                                                                编辑框组件中  



5。7    图片(Picture )控件  



     图片(Picture )控件实际上是一种静态文本(CStatic )控件,可以通过在创建静态文本 

控件时加入特定的标志来得到图片控件,这些方面的内容,具体可以参见  5。1 节。这里主要 

介绍一下如何在资源编辑器中快捷方便地使用图片控件。  

     选中图片控件后拖放到对话框上,可以通过图片控件属性对话框来对图片控件进行基本 



                                                                                        ·125 ·  


…………………………………………………………Page 135……………………………………………………………

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



设置,图片对话框如图 5…5 所示。  



                                                                                       



                                      图 5…5    Picture Properties 对话框  



      图片控件所支持的格式如表 5…18 所示。  



      表 5…18                               Picture 控件支持的格式  



              格式                                                含义  

      Frame                   显示一个无填充的矩形框,边框颜色可以通过 Color 下拉列表设定  

      Rectangle               显示一个填充的矩形框,矩形颜色可通过 Color 下拉列表设定  

      Icon                    显示一个图标(Icon ),图标通过 Image 下拉列表来设置图标资源 ID  

      Bitmap                  显示一个位图(Bitmap ),位图通过 Image 下拉列表来设置位图资源 ID  

      Enhanced Metafile       显示一个加强的元数据文件(Metafile )  



      由于图片控件在具体使用方法上和静态文本控件没有什么差别,因此在这里就不详细叙 

述了。  



      实例 5…3:美化对话框应用程序实例。源代码在光盘中“05实例 5…3New_RMB ”目录下。  



      下面为数字转换一例中的截面定制漂亮的界面和按钮,通过此例程读者将学习到如何美 

化对话框应用程序的界面。  

      定制“外衣”的主要代码是使用 WM_ERASEBKGND 、WM_CTLCOLOR 消息重画用户 

界面,利用 CBitmapButton 实现位图按钮,主要代码如下:  



      HBRUSH CRMBDlg::OnCtlColor(CDC* pDC; CWnd* pWnd; UINT nCtlColor)    



      {  



           HBRUSH hbr = CDialog::OnCtlColor(pDC; pWnd; nCtlColor);  



             



           // TODO: Change any attributes of the DC here  



           switch(nCtlColor) {  



           case CTLCOLOR_EDIT:  



                {  



                      if (pWnd…》GetDlgCtrlID() == IDC_EDIT_NUM)  



                      {  



                           pDC…》SetBkMode(TRANSPARENT);  



                           pDC…》SetTextColor(RGB(200;10;200)); //改变字体的颜色  



                           hbr = HBRUSH(GetStockObject(HOLLOW_BRUSH));  



                      }  



                      else if(pWnd…》GetDlgCtrlID() == IDC_EDIT_CHA)  



                      {  



 ·126 ·  


…………………………………………………………Page 136……………………………………………………………

                                                                                                                  第 5 章    常用控件  



                              pDC…》SetBkMode(TRANSPARENT);  



                              pDC…》SetTextColor(RGB(200;10;200)); //改变字体的颜色  



                              hbr = HBRUSH(GetStockObject(HOLLOW_BRUSH));  



                      }  



                      else  



                      {  



                              hbr = CDialog::OnCtlColor(pDC; pWnd; nCtlColor);  



                      }  



                      break;                  



               }  



       case CTLCOLOR_STATIC:  



               {  



                      if(pWnd…》GetDlgCtrlID() == IDC_SMALL_STATIC)  



                      {  



                              pDC…》SetBkMode(TRANSPARENT);  



                              pDC…》SetTextColor(RGB(10;10;255));  



                              hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);  



                      }  



                      else if(pWnd…》GetDlgCtrlID() == IDC_LARGE_STATIC)  



                      {  



                              pDC…》SetBkMode(TRANSPARENT);  



                              pDC…》SetTextColor(RGB(255;10;10));  



                              hbr = (HBRUSH)GetStockObject(HOLLOW_BRUSH);  



                      }  



                      else  



                      {  



                              hbr = CDialog::OnCtlColor(pDC;pWnd;nCtlColor);  



                      }  



               }  



               break;  



       default:  



               break;  



       }  



       // TODO: Return a different brush if the default is not desired  



       return hbr;  



}  



BOOL CRMBDlg::OnEraseBkgnd(CDC* pDC)  



{  



       CBitmap bmp;  



       bmp。LoadBitmap(IDB_BG);  



                                                                                                                                 ·127 ·  


…………………………………………………………Page 137……………………………………………………………

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



          CBrush brush(&bmp);  



          CRect rc;  



          GetClientRect(&rc);  



          pDC…》FillRect(rc; &brush);    



          return true;  



     }  



     程序运行界面如图 5…6 所示。  



                                                                   



                               图 5…6    定制外衣后对话框的用户界面  



5。8    列表(List Ctrl )控件  



5。8。1    Win32 新型控件概述  



     列表控件是一种 Win32 控件,这和前面提到的传统控件在某些方面存在不同。Win32 控 

件采用新的 WM_NOTIFY 消息来实现新控件的消息通知机制。在该消息的 wParam 中含有控 

件的 ID,lParam 中则有一个指针,这个指针指向一个结构。这个结构要么是 NMHDR 结构, 

要么是一个以 NMHDR 结构作为第一个成员的扩充结构。通过 NMHDR 结构及其扩充结构可 

以传递附加数据。从理论上讲,可以通过扩充结构传送任意多的数据。需要指出的是,由于 

NMHDR     结构是扩充结构的第一个成员,因此  lParam                       中的指针即可以认为是指向 NMHDR 

结构的,也可以认为是指向包含 NMHDR 结构的扩充结构的。  



     1.NMHDR 结构  



     NMHDR 结构如下:  



     typedef struct tagNMHDR  



     {  



          HWND hwndFrom; //控件窗口的句柄  



          UINT idFrom; //控件的 ID  



          UINT code; //控件的通知消息码  



     }NMHDR;  



     一个典型的扩充结构如下,该结构用于列表视图控件的 LVN_KEYDOWN 通知消息。  



     typedef struct tagLV_KEYDOWN{  



          NMHDR hdr; //NMHDR 结构作为第一个成员  



 ·128 ·  


…………………………………………………………Page 138……………………………………………………………

                                                                        第 5 章    常用控件  



         WORD wVKey;    



         UINT flags;    



     }LV_KEYDOWN;  



    2 .WM_NOTIFY 消息处理  



    WM_NOTIFY 的消息映射由宏 ON_NOTIFY 负责,该消息映射宏具有如下形式:  



    ON_NOTIFY(wNotifyCode;id;memberFxn)  



     参数 wNotifyCode  说明了通知消息码,参数 id 是控件的 ID,第三个参数则是消息处理 

函数名。消息处理函数应该按下面的形式声明,其中参数 pNotifyStruct 指向 NMHDR 及其扩 

充结构,参数 result 指向一个处理结果:  



    afx_msg void memberFxn(NMHDR* pNotifyStruct; LRESULT * result);  



     利用 ClassWizard 可以很方便地加入 WM_NOTIFY 消息映射及其处理函数,一个典型的 

WM_NOTIFY 消息映射如下,其中 LVN_KEYDOWN 是 IDC_LIST1 列表视图控件发出的通 

知消息:  



    ON_NOTIFY(LVN_KEYDOWN; IDC_LIST1;OnKeydownList1)  



     消息处理函数 OnKeydownList1 的定义如下:    



    void CMyDlg::OnKeydownList1(NMHDR* pNMHDR; LRESULT* pResult)  



     {  



         LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;  



         // TODO: Add your control notification handler  



         // code here  



         *pResult = 0;  



     }  



    在函数中       ClassWizard 自动把 pNHHDR        指针强制转换成          LV_KEYDOWN      型并赋给 

pLVKeyDow 指针,这样,在函数中可通过这两个指针访问 LV_KEYDOWN 扩充结构及其所 

含的 NMHDR 结构。另外,在函数返回时,ClassWizard  自动将处理结果赋 0 值。  

     可以利用 ON_NOTIFY_RANGE 宏把多个 ID 连续的控件发出的相同消息映射到同一个 

处理函数上,具体形式如下:    



    ON_NOTIFY_RANGE(wNotifyCode; id; idLast; memberFxn)  



     其中参数 id 和 idLast 分别说明明了一组连续的控件 ID 中的头一个和最后一个 ID 。  

     相应的消息处理函数应按下面的形式声明:    



    afx_msg void memberFxn(UINT id; NMHDR* pNotifyStruct;LRESULT * result);  



     与普通的 WM_NOTIFY 消息处理函数相比,该函数多了一个参数 id 用来说明发送通知 

消息的控件 ID 。  

    ClassWizard 不支持 ON_NOTIFY_RANGE 宏,所以需要手工建立消息映射和消息处理函 

数。  



5。8。2    列表控件的使用  



     列表控件用来成列地显示数据。列表视图的表项通常包括图标(Icon )和标题(Label ) 



                                                                                 ·129 ·  


…………………………………………………………Page 139……………………………………………………………

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



两部分,它们分别提供了对数据的形象和抽象描述。列表视图控件是对传统的列表框的重大 

改进,它能够以下列 4  种格式显示数据。读者可以在资源管理器中的视图(View)菜单中切换 

列表视图的显示格式,来看看 4 种格式的不同之处。  

    o  大图标格式(Large Icons ):可逐行显示多列表项,图标的大小可由应用程序指定,通 

      常是 32 ×32 像素,在图标的下面显示标题。  

    o  小图标格式(Small Icons):可逐行显示多列表项,图标的大小可由应用程序指定,通 

      常是 16×16 像素,在图标的右面显示标题。表项以行的方式组织。  

    o  列表格式(List )。与小图标格式类似。不同之处在于表项是逐列多列显示的。  

    o  报告格式(Report 或 Details ):每行仅显示一个表项,在标题的左边显示一个图标, 

      表项可以不显示图标而只显示标题。表项的右边可以附加若干列子项(Subitem),子 

      项只显示正文。在控件的顶端还可以显示一个列表头用来说明各列的类型。列表视图 

      的报告格式很适合显示报表(如数据库报表)。  

    典型的列表控件的格式如图 5…7 所示。  



                                                             



                             图 5…7    ClistCtrl 控件形式样例  



    在讨论如何使用列表视图控件以前,先向读者介绍一下与该控件有关的一些数据类型。  



    1.LV_COLUMN 结构  



    该结构仅用于报告式列表视图,用来描述表项的某一列。要想向表项中插入新的一列, 

需要用到该结构。LV_COLUMN 结构的定义为:  



    typedef struct _LV_COLUMN{  



        UINT mask;    



        //屏蔽位的组合(见下面括号 ),表明哪些成员是有效的  



        int fmt;  



        //该列的表头和子项的标题显示格式(LVCF_FMT) 。可以是 LVCFMT_CENTER 、LVCFMT_LEFT  



      //或 LVCFMT_RIGHT  



        int cx; // 以像素为单位的列的宽度(LVCF_FMT)  



        LPTSTR pszText; //指向存放列表头标题正文的缓冲区(LVCF_TEXT)  



        int cchTextMax; //标题正文缓冲区的长度(LVCF_TEXT)  



        int iSubItem; //说明该列的索引(LVCF_SUBITEM)  



    }LV_COLUMN;  



 ·130 ·  


…………………………………………………………Page 140……………………………………………………………

                                                                                  第 5 章    常用控件  



     2 .LV_ITEM 结构  



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