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

时间: 2024-09-28 15:32:13

CxSkinButton按钮皮肤类的相关文章

mfc-单文档 MFC 按钮 view类

问题描述 单文档 MFC 按钮 view类 单文档程序,在一个对话框(类名字为wer)里添加一个按钮,现在想通过点击该按钮调用VIEW里面的函数?请问该怎么操作? 解决方案 按钮中获取View对应的指针,然后调用函数.GetActiveView()

c#-C#点击按钮改变类的成员变量的值

问题描述 C#点击按钮改变类的成员变量的值 我在类里面定义了一个成员变量n,想用点击按钮来改变它的值,在按钮方法里面实现了,但是再在其他方法里面将n赋给其他变量的时候却不能实现. 解决方案 肯定也是可以实现的 比如 public void Foo(int a){ this.n=a; } 你调用这个方法不可能n的值不变吧? 解决方案二: 估计是你的对象是私有的,或者你在其它方法访问的时候又创建了一个.你可以把对象定义成static形式看看. 解决方案三: 总之就是 xxxx.n = xxx 解决方

flex自定义按钮皮肤示例附图_Flex

先看效果图: 其中Test.mxml为: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.c

AS3 Scale9 Bitmap类

翻译自:http://www.uza.lt/codex/as3-scale9-bitmap/ 简介: AS3 Scale9 Bitmap是个辅助的类,使用它可以通过bitmap数据填充创建九宫格sprite,而这些在Flash 9中是无法实现的.这个辅助类根据用户定义的缩放矩阵创建了9个虚拟的九宫格sprite.特别适用于创建用户界面(比如按钮,可伸缩的UI元素等等). 内容: Scale9SimpleStateButton - 用于创建可伸缩的1.3 或者3种状态使用bitmap数据(皮肤)的

设计体验:按钮上的内容

最近 UCDChina 以"注意界面上的文字"为主题写了一系列的文章,使我在界面文字上的使用受益匪浅.之后,我对按钮上的内容的表现也做了一些总结与分析,与大家分享并希望得到指正. 1. 不必区分按钮还是链接.(这里列举的不是对他人观点进行攻击,而只是得以借鉴.) 很多人主张区别链接与按钮.这里,思域有一篇"关于鼠标点击对象:哪些应该是按钮,哪些应该是链接的说明." 臭鱼的"网页按钮的功能与表现",将按钮分成真正的按钮和伪按钮两类. 而事实上,不管

看实例学VFP:新类的使用

一.新定义类的使用 (一)将新类添加到表单 存储于类库中的新类在使用之前应首先将其打开或注册,可以通过以下三种方法将类库打开或注册: 1.使用"项目管理器": 在"项目管理器"中选择"类"选项卡,单击"添加"会出现"打开"对话框.在"打开"对话框中可心选择一个类库并打开.所打开的类库将被添加到项目之中,我们就可以将类从"项目管理器"中拖到"表单设计器&quo

photoshop制作木纹风格按钮

最终效果图 1.新建文件,使用矩形选区工具绘制一个矩形按钮,前景色设置为#990000 ,背景色设置为#660000,选择反射渐变工具,填充,并使用自由变换工具对按钮进行扭曲.效果如下: 2.选择按钮底层,调出选区,将选区缩进5个像素(选择-修改-缩小).新建层,命名为按钮皮肤.按下X键将前景色和背景色进行调换.依旧选择渐变工具从上到下进行渐变. 3.执行滤镜--杂色--添加杂色,数量:15.54,分布:高斯分布.如下图:  4.再执行滤镜--模糊--动感模糊,角度:0,距离:18像素,还有图层

Flex4 设置button按钮背景图片(up,down,over等各状态)

Flex4 - 设置button按钮背景图片(up,down,over等各状态) Flex4中,如果要设置spark组件的button按钮背景图,可以通过自定义皮肤来实现.在皮肤中添加BitmapImage组件,分别设置在各个状态下的图片即可(同时背景图可使用9宫格样式,便于拉伸).代码如下:   --- 按钮皮肤 ImageBgButtonSkin.mxml ---   <?xml version="1.0" encoding="utf-8"?> &l

重新思考“快捷”的含义:快按钮要用实体键帮你一键达成目标

人的惰性是无穷尽的.智能手机挺好用的,不过平时放在桌上,想看看微信,就得拿过来按下电源键,然后划一下解锁,再点下微信.一天下来次数多了,我都觉得有点烦了.快按钮希望能简化这一过程,想拍照或者看看微信,只用按一个键就能完成.快按钮的硬件产品长得像耳机插头,插在手机的耳机插口上,可以短按或者长按.用户可以提前在软件端进行设定,给希望简化的操作配上物理操作方法,比如短按一下是打开摄像头并拍照,长按一下是开始新的录音,一短一长是打开微博.设定完成后,你就能很方便的完成这些操作,好吧有些时候不是一键,但是