随笔 - 298  文章 - 377  trackbacks - 0
<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(34)

随笔分类

随笔档案

文章档案

相册

收藏夹

搜索

  •  

最新评论

阅读排行榜

评论排行榜

位图按钮的实现方法:  
  首先,我们创建一个基于对话框的应用程序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);  
posted on 2007-08-13 17:26 聂文龙 阅读(3771) 评论(1)  编辑 收藏 引用 所属分类: Visual C++

FeedBack:
# re: 在VC中使用位图按钮 2007-08-16 17:34 聂文龙
/*
//从相对路径加载BMP
void CSkinTab::SetSkin(int nIndex, CString strNormal, CString strOver, CString strDown)
{
ASSERT(nIndex < m_nTabCount);

if (m_pTabBmpNormal[nIndex].m_hObject)
m_pTabBmpNormal[nIndex].Detach();
if (m_pTabBmpOver[nIndex].m_hObject)
m_pTabBmpOver[nIndex].Detach();
if (m_pTabBmpDown[nIndex].m_hObject)
m_pTabBmpDown[nIndex].Detach();

HBITMAP bm = (HBITMAP)::LoadImage(NULL,strNormal,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_pTabBmpNormal[nIndex].Attach(bm);
bm = (HBITMAP)::LoadImage(NULL,strOver,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_pTabBmpOver[nIndex].Attach(bm);
bm = (HBITMAP)::LoadImage(NULL,strDown,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_pTabBmpDown[nIndex].Attach(bm);
}
//从资源文件加载BMP
void CSkinTab::SetSkin(int nIndex, UINT nNormalID, UINT nOverID, UINT nDownID)
{
ASSERT(nIndex < m_nTabCount);

if (m_pTabBmpNormal[nIndex].m_hObject)
m_pTabBmpNormal[nIndex].Detach();
if (m_pTabBmpOver[nIndex].m_hObject)
m_pTabBmpOver[nIndex].Detach();
if (m_pTabBmpDown[nIndex].m_hObject)
m_pTabBmpDown[nIndex].Detach();

m_pTabBmpNormal[nIndex].LoadBitmap(nNormalID);
m_pTabBmpOver[nIndex].LoadBitmap(nOverID);
m_pTabBmpDown[nIndex].LoadBitmap(nDownID);
}

//从相对路径加载ICO
void CSkinTab::SetIcon(int nIndex, CString strIcon)
{
ASSERT(nIndex < m_nTabCount);
m_phIcon[nIndex] = (HICON)::LoadImage(AfxGetApp()->m_hInstance,strIcon,IMAGE_ICON,24,24,LR_LOADFROMFILE);
}

//从资源文件加载ICO
// 1. 打开ICON按钮的属性页,在Style中选中Icon 。
// 2. 在对话框类的头文件中定义成员变量(使用ClassWizard加入这个成员变量)
// CButton m_IconBtn;//对应于图标按钮
// 3. 创建相应的图标或者位图资源:
// 图标资源:IDI_ICONBUTTON
// 4.在初始化中加入如下代码:
// …
// //对应于图标按钮
// HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICONBUTTON);
// m_IconBtn.SetIcon(hIcon);
*/  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理