位图按钮图像包括图像本身以及图像的边框。边框在表示按钮的不同状态时很有用。例如,按钮获得焦点时的位图与未按下(或正常)状态的位图相同,但是在边框中要么嵌入了由间断线组成的矩形,要么嵌入了由粗实线组成的矩形。禁止存取状态的按钮的位图通常和正常状态的一样,但是颜色的对比度较小,就象变灰的菜单选项一样。
这些位图的尺寸可以不同,但都当成和正常状态下位图一样的大小处理。
不同的应用对位图有不同的组合应用。如下所示:
|
未按下
|
按下 | 获得焦点 | 禁止存取 | 应用 |
| Ⅹ | 类Bitmap | |||
| Ⅹ | Ⅹ | 没有设置WS_TABSTOP的按钮 | ||
| Ⅹ | Ⅹ | Ⅹ | Ⅹ | 带有所有状态的对话框按钮 |
| Ⅹ | Ⅹ | Ⅹ | 设置WS_TABSTOP风格的对话框按钮 |
在创建一个位图按钮控件时,设置BS_OWNERDRAW则指明按钮是自定义的(用户自己绘制的)。这样,Windows就会为该按钮发送WM_MEASUREITEM和WM_DRAWITEM消息,由框架处理这些消息并维护按钮的外观。
在窗口的客户区创建一个位图按钮的步骤如下:
|
1.
|
为按钮创建1到4个位图。 |
| 2. | 构造CBitmapButton对象。 |
| 3. | 调用Create函数创建Windows按钮控件,并把它加到CBitmapButton对象上。 |
| 4. | 调用成员函数LoadBitmaps加载位图资源。 |
在对话框控件中包含位图按钮的步骤如下:
|
1.
|
为按钮创建1到4个位图。 |
| 2. | 创建一个对话框模板,其中有一个自定义的按钮放在需要位图按钮的位置。模板中按钮的大小无关紧要。 |
| 3. | 把按钮的标题设置为“MYIMAGE”一类的字符串,并为按钮定义一个类似于IDC_MYIMAGE的代号。 |
| 4. | 在应用的资源脚本中,分别为每个给该按钮创建的图像一个ID,ID的值为在步骤3中的标题后加上如下的一个字母——U、D、F或X,分别代表正常、按下、获得焦点和禁止存取状态下的按钮。例如,标题设为“MYIMAGE”时,ID就应该是字符串("MYIMAGEU"、"MYIMAGED"、"MYIMAGEF"和"MYIMAGEX")。位图的ID必须用引号括起来,否则资源编辑器就会为资源赋上一个整数值,MFC在加载图像时就会失败。 |
| 5. | 在应用的对话框类(从类CDialog继承而来)中加上一个CBitmapButton成员对象。 |
| 6. | 在CDialog对象的OnInitDialog例程中调用CBitmapButton对象的AutoLoad函数,参数是按钮的ID和CDialog对象的this指针。 |
如果想处理Windows的通知消息,如位图按钮控件发给它的父对象(通常是从CDialog继承来的)的BN_CLICKED消息,就要在从CDialog继承来的对象中加入消息映射入口以及处理每个消息的成员函数。CBitmapButton对象发出的通知和CButton对象发出的通知一样。
类CToolBar对位图对象的实现有些不同。
