按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
具有输入焦点的窗口将会得到所有的键盘输入消息。我们可以通过类
CWnd的成员函数GetFocus来使对话框中的控件获得输入焦点。
试将下面的代码加到消息处理函数OnInitDialog的return语句前:
…………………………………………………………Page 322……………………………………………………………
m_bnClickhere。SetFocus();
或
GetDlgItem(IDC_CLICKHERE)…》SetFocus();
编译并运行程序。非常奇怪,输入焦点并没有被设置到下压按钮 “单
击这里”上。依然是按钮 “确定”拥有当前输入焦点。
请注意这样的事实:
l 注意:
l 如果在消息处理成员函数OnInitDialog中将输入焦点设置到指定
的控件,则函数应该返回FALSE,这是因为如果WM_INITDIALOG消
息的处理函数返回真值,Windows会将输入焦点设置为对话框中的
第一个控件。因此,如果在该处理函数中设置了控件的输入焦
点,WM_INITDIALOG消息的处理函数应该返回假值。
将下面的代码
return TRUE;
修改为
return FALSE;
这时再编译并运行程序,则输入焦点将被正常地设置到下压按钮 “单
击这里”上。这时按下空格键相当于在按钮 “单击这里”上单击鼠标
左键。
(4) 使用图形代替文本
在一些应用程序,尤其是一些多媒体应用程序中,我们希望按钮的外
观看起来更加的美观,比如说我们希望使用多变的图形代替单调乏味
的纯文本。对于一般的按钮控件,我们可以使用两种方法来在按钮中
使用图形来代替文本。
第一种方法是使用图标来代替文本。下面的示例说明了这种用法:
1。 使用资源编辑器或其它工作编辑一个图标资源,其ID为
IDI_CLICKHERE,图案如图6。18所示。
2。 在希望使用图标图案的按钮控件的Properties属性框在Styles选
…………………………………………………………Page 323……………………………………………………………
项卡中设置Icon属性为真。并按图6。19修改对话框及其中控件的大
小。
3。 在类CPushButtonDlg的消息处理成员函数OnInitDialog中添加下
面的代码。这些代码应该在对基类的OnInitDialog成员函数的调用之
后。
图6。 18 图标IDI_CLICKHERE
图6。 19 为使用图标按钮修改
对话框中控件的大小
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成员函数中的retur