按钮的样式VS2010

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

来源:互联网

★5--2--1 图标按钮

图标按钮可谓是按钮控件使用图像最简单的方式,除此之外图标按钮的优点还在于显示在按钮上的图

标能够使用透明色,因而不必再去为处理非矩形图像在按钮颜色发生变化时边缘颜色的处理而费心。不过也正是使用图标导致了图标按钮的天生弱点。图标太小了,仅仅才32×32 像素大小,在有的场合仅靠使用这么小的图像就有些显得力不从心了。

在讲图标按钮如何使用之前,先得告诉读者句柄的概念。句柄是什么?很多教科书上都这样定义:句柄是一个用于代表对象的32 位整型值。不过这对于很多初学者而言,并不是太好理解。其实也可以将未赋值的句柄理解为一个指向“空白”(void *)的指针,事实上也如此,在Winnt.h中,句柄就是如此被声明的:typedef void *HANDLE; 当句柄被赋值之后,它就成为指向某个特定位置的指针,即代表了某个特定的对象。之所以在现在提及句柄,是因为句柄是Windows 编程中的一个关键性概念。尽管在前面除第三章外的内容中很少涉及它,不过在下面的学习中我们将会很频繁的使用到句柄。

技术概要:

使用图标按钮很简单,大的步骤仅仅就三步:

①.从外部导入一个图标或自己创建一个图标作为资源。

②.从资源中载入所要使用的图标。

③.在要使用图标的按钮上设置图标。

具体实现:

■第一步导入图标没有什么特别之处,同前面2.2 节中使用静态图像控件导入位图是非常类似的。无非就是使用Insert 菜单上的Resource 命令,导入或创建一个图标即可。

■第二步载入图标就涉及到一些细节问题了。使用函数LoadIcon() 载入图标。因为LoadIcon() 是类CWinApp的成员函数,同时函数LoadIcon() 返回所载入图标的句柄。所以我们采用以下方法来调用函数LoadIcon():

h_Icon = AfxGetApp() ->LoadIcon(IDI_Icon);

当然,在该语句之前还必须要有对图标句柄h_Icon

的定义:

HICON h_Icon;

■第三步为按钮设置图标了,这通过调用函数SetIcon() 来实现。同时不要忘记,还须在使用图标的按钮的

Properties 设置中设置Icon 属性,指明该按钮是一个图标按钮。因为函数SetIcon() 为类CButton的成员函数,可以通过两种方法来调用该函数。一是通过CButton类对象来调用SetIcon(),如下面代码:

m_BtonIcon.SetIcon(h_Icon); // m_BtonIcon为一个CButton类对象。

二是先由函数GetDlgItem() 获得一个指向CWnd对象的指针,再通过强制类型转换将该指针转换为一个指向CButton类对象的指针。进而通过该指针来调用函数SetIcon()。具体实现代码如下:

CWnd *pWnd = GetDlgItem(IDC_RADIO2);

CButton *pBton = (CButton *) pWnd;

pBton ->SetIcon(h_Icon2);

既然有第一种较为简便的方法为按钮设置图标,为何还要提及第二种方法呢?因为并不是在任何情况下

都会有CButton类对象的,例如对于一组单选按钮。只能为它们定义一个CButton类对象,如果使用该对象来调用函数SetIcon(),则只能在设置了Group 属性的那个单选按钮上设置图标。所以要达到在一组单选按钮中分别设置不同图标的目的,就只有使用第二种方法。

尽管在现在的Windows 编程中,资源句柄数多得相对于我们而言几乎是无限的,但最好在使用完资源句柄后及时的把它们删除掉。上面所讲述的方法不仅适用于Push Button,而且同样适用于Radio Button、Check Box 和Group Box。

★5--2--2 位图按钮

图标按钮虽有着种种优点,但它能显示的图像实在是太小了。在有的场合显然就不适用了。位图按钮可以在按钮表面显示一幅位图而不再是一个小小的图标。但是因为在位图中不能使用透明色,因而当显示的位图不为矩形时,就得为位图中非矩形部分的背景色动一番脑筋了。因为存在着用户改变按钮表面颜色,也就是位图背景色的可能性。可以用透明位图的技术来解决这一难题,这将在后面 5.7 实现具有透明性的位图中讲述。

技术概要:

位图按钮的使用的大致步骤同图标按钮基本相似,也是以下三个步骤:

①从外部导入一个位图或自己创建一个位图作为资源。

②从资源中载入所要使用的位图。

③在要使用位图的按钮上设置位图。

具体实现:

■第一步从外部导入一个位图作为资源同使用图标按钮时是完全一致的,在此就不详细讲述了。

■第二步中,利用函数LoadBitmap() 从资源中载入位图。函数LoadBitmap() 为一个API 函数,定义如下:

HBITMAP LoadBitmap(

HINSTANCE hInstance, // handle of application instance

LPCTSTR lpBitmapName // address of bitmap resource name

);

所以,为达到载入位图的目的,不仅要定义一个位图句柄hBitmap:

HBITMAP hBitmap;

而且还要定义一个应用程序实例句柄hInstance;:

HINSTANCE hInstance;

并调用函数AfxGetInstanceHandle() 以获得当前的应用程序实例句柄,代码如下:

hInstance = ::AfxGetInstanceHandle();

相关文档
最新文档