面对现实,超越自己
逆水行舟,不进则退
posts - 269,comments - 32,trackbacks - 0

【按钮添加图标】

方法一:

1.添加图标资源IDI_ICON1;

2 使用函数 LoadIcon() 载入图标。因为LoadIcon() 是类 CWinApp 的成员函数,同时函数 LoadIcon() 返回所载入图标的句柄。所以我们采用以下方法来调用函数 LoadIcon():

HICON m_hicn1=AfxGetApp()->LoadIcon(IDI_ICON1);

3 为按钮设置图标了,这通过调用函数 SetIcon() 来实现:

m_button1.SetIcon(m_hicn1);  //  m_button1是按钮变量

 

方法二:

前两步和上方法一样;

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

CWnd *pWnd = GetDlgItem(IDC_BUTTON1);
CButton *Button= (CButton *) pWnd;
Button-> SetIcon(m_hicn1);

 

【按钮添加位图】

1 添加位图资源BMP1;

2 利用函数 LoadBitmap() 从资源中载入位图.

HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle of application instance
LPCTSTR lpBitmapName // address of bitmap resource name
);

所以,为达到载入位图的目的,不仅要定义一个位图句柄 hBitmap,而且还要定义一个应用程序实例句柄 hInstance,

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

HBITMAP hBitmap;

HINSTANCE hInstance = ::AfxGetInstanceHandle();

只有在声明并获得了当前的应用程序句柄后,才能使用以下语句载入位图:

hBitmap = ::LoadBitmap(hInstance,"BMP1");   //BMP1是资源文件名

3 用SetBitmap()添加位图;

m_button1.SetBitmap(hBitmap);

pWnd = GetDlgItem(IDC_BUTTON1);
Button= (CButton *) pWnd;
Button-> SetBitmap(hBitmap);

___________________________________________________

 

位图按钮的实现方法:  
首先,我们创建一个基于对话框的应用程序CmyDialog    ;  
Ι.MFC的CBitmapButton类,这也是最简单的功能最强的位图按钮。我们可以采取如下的步骤:  
1. 为按钮指定唯一的按钮标题(此例子为OK按钮,这里设置按钮标题为OK)并选中Ownerdraw属性,然后在项目中加一些位图资源,并用名字标示这些资源而不要用数字ID,其ID分别为”OKU”、”OKD”、”OKF”、”OKX”(一定要加双引号),分别对应于按钮的“松开(Up)”、“按下(Down)”、“获得输入焦点(focused)”和“禁止(Disable)”状态。  
2. 我们还要在对话框类中加入CBitmapButton    m_aBmpBtn;数据成员。  
3. 在初始化中为这个成员调用:    
…  
m_aBmpBtn.    AutoLoad(IDOK,this);  
…  
点击编译按钮,成功后运行程序,我们的位图按钮已经建立了。  
改变CANCLE按钮的标题,可以设置其标题为ICON或者BITMAP    :(这里我们演示了bitmap的用法,Icon按钮读者可以按照下面的代码处理) 

CBitmapButton的使用
CBitmapButton作为MFC的控件类,并不为很多人所使用,因为现在网上遍布着从CButton派生的各种各样的按钮类,其中最为著名的就是CButtonST类了。但是最近在CSDN上看到几个问题都是使用CBitmapButton类,但是由于使用错误、不当而造成程序崩溃或者错误的。所以总结一下CBitmapButton类的使用,希望能帮助一些初学者。
可以参考MSDN自带的例子“CTRLTEST”学习CBitmapButton的用法。个人总结如下: 
1、在资源编辑的时候选中按钮的Owner  draw即可,不需要选择Bitmap属性! 
2、在程序中定义一个CBitmapButton成员变量。不能使用ClassWizard为按钮映射一个CButton变量,然后改为CBitmapButton,这么做并不能将按钮直接映射为CBitmapButton类的对象,反而会出现初始化错误。也不能两种变量同时存在,会造成程序崩溃。 
3-1、使用CBitmapButton::LoadBitmaps装载各种状态的图片,使用SubclassDlgItem关联到想要的按钮,使用CBitmapButton::SizeToContent函数使按钮适合图片大小。。注意Loadbitmaps一定要在关联到按钮之前进行! 
3-2、或者是使用CBitmapButton::AutoLoad函数关联到想要的按钮。需要注意:
A、之前不能使用CBitmapButton::LoadBitmaps装载各种状态的图片,否则会出错。
B、AutoLoad函数完成的关联和改变按钮大小的CBitmapButton::SizeToContent函数的功能。
C、CBitmapButton::AutoLoad使用的位图是默认资源ID的,即它会自动装载相关资源位图。位图的资源ID格式为:"按钮Caption+U"、"按钮Caption+D"、"按钮Caption+F"、"按钮Caption+X",分别代表Up、Down、Focus、Disable状态。如资源编辑时,希望关联的按钮的Caption为Test,那么其默认装载的位图资源的ID为:"TestU"/"TestD"/"TestF"/"TestX",注意分号""也是其ID的一部分。


Ⅱ.使用图标制作按钮  
1. 打开ICON按钮的属性页,在Style中选中Icon
2. 在对话框类的头文件中定义成员变量(使用ClassWizard加入这个成员变量)  
CButton    m_IconBtn;//对应于图标按钮  
3. 创建相应的图标或者位图资源:  
图标资源:IDI_ICONBUTTON  
4.在初始化中加入如下代码:    
…  
//对应于图标按钮  
HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICONBUTTON);  
m_IconBtn.SetIcon(hIcon);  
…  
重新编译运行我们的程序,奇妙的图像按钮呈现在我们的眼前了。 


Ⅲ.使用位图制作按钮  
1. 打开BITMAP按钮的属性页,在Style中选中Bitmap。  
2. 对话框类的头文件中定义成员变量(使用ClassWizard加入这个成员变量)  
CButton    m_IconBtn;  
3.创建位图资源:  
位图资源:IDB_BITMAPBUTTON  
4.在初始化中加入如下代码:    
//对应于位图按钮  
…  
HBITMAP    hBmp=::LoadBitmap(AfxGetInstanceHandle(),  
MAKEINTRESOURCE(IDB_    BITMAPBUTTON));  
m_BmpBtn.SetBitmap(hBmp); 

本文转自:http://hi.baidu.com/lechie/item/dcbca9f4ee98a3d742c36ad4 

posted on 2012-06-18 17:32 王海光 阅读(1689) 评论(0)  编辑 收藏 引用 所属分类: MFC

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理