您的位置:首页 > 其它

VC位图按钮相关实现方法总结

2011-07-20 17:18 260 查看
位图按钮的实现方法:
首先,我们创建一个基于对话框的应用程序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);

点击编译按钮,成功后运行程序,哈哈,看看效果,我们的位图按钮已经建立了。
/*如果以上方法不行请检查你的BITMAP 资源,APPSTUDIO中, "OKU "和 "OKD " 等的资源名称都是需要用引号引起来的, AutoLoad不成功,很可能就是由此产生的。 */
改变CANCLE按钮的标题,可以设置其标题为ICON或者BITMAP :(这里我们演示了bitmap的用法,Icon按钮读者可以按照下面的代码处理)
Ⅱ.使用图标制作按钮
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://topic.csdn.net/t/20010819/12/245718.html的部分内容。
/////////////////////////////////////////////////////////////////////////////////
网上的其他实现途径总结
(1)
BOOL CE0406Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
HICON hlcon=AfxGetApp()->LoadIcon (IDI_ICON1);
m_IconButton.SetIcon(hlcon);
HBITMAP hBitmap=::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_BitmapButton.SetBitmap(hBitmap);
return TRUE;
// Add "About..." menu item to system menu.
此方法出自http://blog.sina.com.cn/s/blog_6c971edd0100nyyr.html
(2)VC按钮添加图标,位图
1 按钮添加图标:
方法一:
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);
2 按钮添加位图:
1 添加位图资源BMP1;
2 利用函数 LoadBitmap() 从资源中载入位图.
HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle of application instance
LPCTSTR lpBitmapName // address of bitmap resource name
);
所以,为达到载入位图的目的,不仅要定义一个位图句柄 hBitmap:
HBITMAP hBitmap;
而且还要定义一个应用程序实例句柄 hInstance;
HINSTANCE hInstance;
并调用函数 AfxGetInstanceHandle() 以获得当前的应用程序实例句柄,代码如下:
hInstance = ::AfxGetInstanceHandle();
只有在声明并获得了当前的应用程序句柄后,才能使用以下语句载入位图:
hBitmap = ::LoadBitmap(hInstance,"BMP1"); //BMP1是资源文件名
3 用SetBitmap()添加位图;
m_button1.SetBitmap(hBitmap);

pWnd = GetDlgItem(IDC_BUTTON1);
Button= (CButton *) pWnd;
Button-> SetBitmap(hBitmap);
此方法出自http://blog.csdn.net/HICON/article/details/1443842
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: