DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

codeproject 发现一个很强大的按钮皮肤类,之前的版本有内存泄露,但是作者已经修复了,原文网址是:http://www.codeproject.com/KB/buttons/cxskinbutton.aspx 。它支持六种位图,分别是正常、按下、滑过、失效、焦点和遮掩位图。根据原文内容,一般用法如下:
1.加入xSkinButton .cpp 和xSkinButton .h 到工程;
2.在按钮控件需要定义的地方加入xSkinButton .h头文件;
3.为按钮添加一个CxSkinButton 类型的变量;
4,在资源视图添加所需要的位图:

  • NORMAL bitmap: 默认按钮图片.
  • DOWN bitmap: 按下按钮图片.
  • OVER bitmap:(可选) 滑过按钮的图片. If NULL, NORMAL bitmap will be used.
  • DISABLED bitmap: (可选) 不可用时的图片. If NULL, NORMAL bitmap will be used.
  • FOCUS bitmap: (可选) 焦点时的图片. If NULL, NORMAL bitmap will be used.
  • MASK bitmap: (可选) 剪辑区域. If you don't use the MASK, the button will be a rectangular owner-draw control. The default transparent color is RGB(255,255,255).

5.在对话框的初始化函数里面添加以下代码:

BOOL CxSkinButtonDemoDlg::OnInitDialog() 

//    ...  
    m_btn1.SetTextColor(RGB(255 ,0 ,0 )); 
    m_btn1.SetToolTipText("Button1" ); 
    m_btn1.SetSkin(IDB_B1NORM,IDB_B1DOWN,IDB_B1OVER,IDB_B1GRAY, 
                       0 ,IDB_B1MASK,0 ,0 ,0 ); 
//    ... 

其他具体的就请看原文了。在具体使用中,我们要使得按钮与位图的大小一致,自己不方便调整,如果这个CxSkinButton有CBitmapButton::SizeToContent()的功能就好了,于是我自己添加了这个函数。在xSkinButton.h头文件里面加入以下:

public 
    void  SizeToContent();//增加自动调整 

然后在xSkinButton.cpp里面实现如下:

void  CxSkinButton::SizeToContent() 

    ASSERT(m_bNormal.m_hObject != NULL); 
    CSize bitmapSize; 
    BITMAP bmInfo; 
    VERIFY(m_bNormal.GetObject(sizeof (bmInfo), &bmInfo) == sizeof (bmInfo)); 
    VERIFY(SetWindowPos(NULL, -1 , -1 , bmInfo.bmWidth, bmInfo.bmHeight, 
        SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOACTIVATE)); 
} 

接着,我们只要在在SetSkin()之后调用这个函数就可以了,如下:

BOOL CxSkinButtonDemoDlg::OnInitDialog() 

//    ...  
    m_btn1.SetTextColor(RGB(255 ,0 ,0 )); 
    m_btn1.SetToolTipText("Button1" ); 
    m_btn1.SetSkin(IDB_B1NORM,IDB_B1DOWN,IDB_B1OVER,IDB_B1GRAY, 
                       0 ,IDB_B1MASK,0 ,0 ,0 ); 
    m_btn1.SizeToContent();//自己添加的,非原作者的,在此声明  
//    ... 

效果如下:

对于图片给的示例源代码将在下一篇给出。地址为:http://blog.csdn.net/akof1314/archive/2010/07/05/5714050.aspx

posted on 2013-12-24 20:43  DoubleLi  阅读(1002)  评论(0编辑  收藏  举报