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

C语言实例教程(PDF格式)-第53章

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




                          对话框中控件的大小  



HICON hIcon=AfxGetApp()…》LoadIcon(IDI_CLICKHERE);  



m_bnClickhere。SetIcon(hIcon);  



编译该应用程序,运行结果如图6。20所示。  



                                          



                     图6。 20 在按钮中使用图标的示例  



这时单击按钮Click Here,图标图案会有向右和向下下压的效果。  



第二种方法是使用位图来代替文本。步骤如下:  



                                         



                      图6。 21 位图资源IDB_CLICKHERE  


…………………………………………………………Page 324……………………………………………………………

1。 向工程资源中添加如图6。21的位图资源,其ID为IDB_CLICKHERE。  



2。   在希望使用位图图案的按钮控件的Properties属性框在Styles选 

项卡中设置Bitmap属性为真。我们注意到Icon属性和Bitmap属性是互 

斥的,即选择一属性的同时也清除了另一属性。并按图6。19修改对话 

框及其中控件的大小。同时参考最终运行结果(如图6。22)修改对话框 

及其按钮的大小。  



3。 在OnInitDialog成员函数中添加如下的代码:  



HBITMAP hBitmap=LoadBitmap(AfxGetApp()…》m_hInstance;MAKEINTRESOURCE 

(IDB_CLICKHERE));  



m_bnClickhere。SetBitmap(hBitmap);  



在上面的代码中,我们使用Win32  API函数LoadBitmap  (注意它不是 

类CWinApp的成员函数)来加载位图资源IDB_CLICKHERE,从而获得位 

图句柄hBitmap,最后以该句柄为参数调用类CButton的成员函数 

SetBitmap。  



编译并运行上面的程序,得到如图6。22所示的运行结果。  



                                   



                 图6。 22 在按钮中使用位图的示例  



  l 注意:  



  l 在上面的示例程序中我们使用了真彩色 (24位)的位图。这样的位 

    图不可以使用资源编辑器来进行编辑。上面的位图是使用其它专 

    门的图形工具来进行编辑并保存到文件Clickhere。bmp中的。请按 

   下面的步骤将该文件添加为工程的资源:  



       1。 选择Insert菜单下的Resource命令,打开如 图所示的对话 

       框。  


…………………………………………………………Page 325……………………………………………………………

                                      



                   图6。 23 插入新的资源  



      2。  从中单击Import按钮,从位图文件Clickhere。bmp中输入 

      资源。注意在文件类型中选择 “All files (*。*)”。  



      Developer  Studio将弹出如图6。24所示的警告对话框。该对 

      话框表明位图资源已被正确添加。但由于使用了多于256色的 

      颜 色数,因此该资源不可以在资源编辑器中打开。  



                                       



        图6。 24 试图添加使用了多于256色的位图资源时的警告消息框  



      3。         按正常的方法将所添加的位图资源的ID修改为 

      IDB_CLICKHERE。必要时重新编辑资源文件或工程。  



6。3。2 位图按钮  



位图按钮是由MFC提供的几种附加控件之一。在前一节的过程中,我 

们可以使用一个位图来代替文本作为下压按钮的标签。而在位图按钮 

中,我们可以使用多达四个位图来分别代表按钮处于四种不同的状态 

(凸起、按下、获得焦点或被禁止)下的显示。而且,使用位图按钮还 

可以去除掉令人讨厌的按钮黑边。而使用位图按钮并不复杂,但是相 

比起标准的按钮控件 (它由Windows 自身所提供)而言有一些特殊。下 

面的过程描述了位图按钮的使用,它们在MFC中使用类CBitmapButton 

封装。  



1。 使用AppWizard创建新的基于对话框的MFC工程BitmapButton。  



2。  使用资源编辑器绘制一个标准按钮,将其ID设为IDC_CLICKHERE, 

标题文本设为CLICKHERE,然后在Styles选项卡中将Owner   draw属性 


…………………………………………………………Page 326……………………………………………………………

设置为真。  



3。 向工程中添加四个位图资源。  



                                                          

                 



     〃CLICKHEREU〃  〃CLICKHERED〃  〃CLICKHEREF〃  〃CLICKHEREX〃  



             图6。 25 位图按钮IDC_CLICKHERE所使用的四个位图资源  



所添加的四个位图资源的ID的设置取决于在第一步中的标题文本的设 

置:按钮未按下去时使用的位图添加了后缀〃U〃;按钮按下去时使用 

的位图添加了后缀〃D〃;按钮拥有焦点时使用的位图添加了后缀〃F〃; 

按钮被禁止时使用的位图添加了后缀〃X〃。需要注意的是,由于这些 

位图资源的ID为字符串,因此在使用属性对话框设置其ID时一定要加 

了双引号,否则资源编辑器会将该ID值看作代表一个整型量的符号。  



4。    在对话框类CBitmapButtonDlg(这里我们沿用上一节中的示例程 

序)中添加类型为CBitmapButton的新的成员变量m_bnClickhere。  



5。 在OnInitDialog成员函数中的return语句前添加下面的代码:  



m_bnClickhere。AutoLoad(IDC_CLICKHERE; this);  



CRect rect1;rect2;  



CButton *pClickhere=(CButton*)GetDlgItem(IDC_CLICKHERE);  



GetClientRect(&rect1);  



pClickhere…》GetWindowRect(&rect2);  



ScreenToClient(&rect2);  



pClickhere…》MoveWindow(rect2。left;(rect1。Height()…rect2。Height())/2;  



rect2。Width();rect2。Height());  



其中第一个参数IDC_CLICKHERE是位图按钮的资源ID,第二个参数为 

指向该位图按钮的父窗口的CWnd对象的指针,这里即类 

CBitmapButtonDlg的this指针。类CBitmapButton的成员函数 

AutoLoad完成以下几步工作:  



(1) 将按钮与CBitmapButton对象相关联;  


…………………………………………………………Page 327……………………………………………………………

(2)    自动加载按钮所使用的位图,条件是这些位图资源满足步骤2中 

的命名约定;  



(3) 自动改变控件的大小以适合所加载的位图资源。  



接下来的几行代码将位图按钮在对话框中进行垂直居中。首先类CWnd 

的成员函数GetClientRect返回了对话框的客户区矩形,接着,类 

CWnd的成员函数GetWindowRect返回了控件IDC_CLICKHERE的窗口矩 

形,然后使用类CWnd的成员函数ScreenToClient将rect2由屏幕坐标 

转换为对话框的客户坐标,这是因为类CWnd的成员函数MoveWindow在 

移动子窗口时将使用父窗口的客户区坐标,而不是使用屏幕坐标。  



6。  按图6。26添加下面的下压按钮IDC_DISABLE,将其标题设置为 “禁 

止使用 (&X)”。  



                                            



                   图6。 26 位图按钮示例程序对话框的设计  



7。  将所有下压按钮的Tab  stop属性 (位于General选项卡中)设置为 

真。并按图6。26调整各控件的大小位置。其中按钮CLICKHERE的大小 

的无关紧要的,我们只需要保证对话框左边是否有足够的空间来显示 

按钮所使用的位图即可。  



8。 为按钮IDC_DISABLE的BN_CLICKED命令编写下面的命令处理函数:  



void CBitmapButtonDlg::OnDisable()   



{  



CButton *pClickhere=(CButton*)GetDlgItem(IDC_CLICKHERE);  



static int bIsEnabled=pClickhere…》IsWindowEnabled();  



if (bIsEnabled)  



{  



pClickhere…》EnableWindow(FALSE);  



SetDlgItemText(IDC_DISABLE;〃允许使用 (&E)〃);  



}  


…………………………………………………………Page 328……………………………………………………………

else  



{  



pClickhere…》EnableWindow(TRUE);  



SetDlgItemText(IDC_DISABLE;〃禁止使用 (&X)〃);  



}  



bIsEnabled=!bIsEnabled;  



}  



上面的代码实现两个功能,即当位图按钮的状态为允许时,单击按钮 

IDC_DISABLE将其状态设置为不允许;在相反的状态下,单击按钮 

IDC_DISABLE将其状态设置为允许。由于实现该过程的代码比较简 

单,因此我们在这里不作详细的讲述。  



编译并运行上面的示例程序,其结果如图6。27所示。  



反复单击位图按钮和禁止使用按钮,以观察位图按钮在不同状态下的 

外观的改变。还可以使用TAB键改变按钮的输入焦点,以观察位图按 

钮获得输入焦点和失去输入焦点时的不同外观。  



                                            



                        图6。 27 位图按钮示例程序  



6。3。3 组框  



组框也是一种按钮控件。它常常用来在视觉上将控件 (典型情况下是 

一系列的单选钮和复选框)进行分组,从而使对话框中的各个控件看 

起来比较有条理。  



                                            



                      图6。 28 组框 (Group box)控件  



相对于其它控件来说,组框的使用非常之简单。这里我们需要强调的 


…………………………………………………………Page 329……………………………………………………………

是,组框仅仅是在视觉上将控件进行分组,事实上控件在编程上的分 

组依赖于其Group属性的设置。  



组框也可以发送BN_CLICKED和BN_DOUBLECLICKED命令消息。但是在般 

情况下我们都不对这些命令作响应。此外,组框也可以设置Icon或 

Bitmap属性 (注意它们之间的互斥的),即我们可以使用图标或位图来 

代替默认情况下的文本。但是在绝大多数情况下,我们仅使用纯文本 

来作为组框的标题。  



与前面讲述的下压按钮类似,我们同样可以使用SetDlgItemText成员 

函数来设置组框控件的标题文本。此外,我们还可以使用GetDlgItem 

来获得与组框控件相关联的CWnd对象的指针,然后通过该指针调用成 

员函数SetWindowText来实现同样的功能。由于在程序中常常不需要 

频繁的操纵组框控件,因此大多数情况下我们不需要为组框控件进行 

成员变量的映射,但这种方法是完全可以的。  



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