zoukankan      html  css  js  c++  java
  • CxSkinButton按钮皮肤类

    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

  • 相关阅读:
    A1051 Pop Sequence (25 分)
    A1060 Are They Equal (25分)
    A1063 Set Similarity (25分)
    A1037 Magic Coupon (25分)
    Mybatis获取插入记录的自增长ID
    压力测试工具ab的使用
    spring注解
    《spring技术内幕》读书笔记(1)——什么是POJO模式
    用HttpSessionListener统计在线用户或做账号在线人数管理
    (转)注释驱动的 Spring cache 缓存介绍
  • 原文地址:https://www.cnblogs.com/lidabo/p/3489657.html
Copyright © 2011-2022 走看看