• 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

  • 相关阅读:
    ISAG协议中彩信支持的几种附件格式(河南电信)
    河南电信ISAG短信下行数据格式
    SQL中varchar和nvarchar有什么区别?
    通过一个很实用的例子让你学会TSQL编程的基本语法和思想
    在读取或者保存word时,程序捕获到word异常“word无法启动转换器mswrd632 wpc”
    工作基本搞定等待周五入职
    ClickOnce发布时,资源文件添加问题
    访问IIS元数据库失败
    一个随机产生中文简体字的一个类
    QQ抢车位外挂(续)
  • 原文地址:https://www.cnblogs.com/lidabo/p/3489657.html
Copyright © 2020-2023  润新知