自绘按钮的实现

如果你希望能够在自己的程序中表现出新意,那么你一定不会仅仅满足于MFC提供那些标准控件。这时,我们就必须自己另外多做些工作了。就改变控件外观这一点来说,主要是利用控件的自绘功能(Owner Draw)实现的。本篇将和各位一起定义一个XP风格的CXPButton按钮类,目的不在于介绍CXPButton类的使用技巧,而在于向各位阐述实现自绘按钮的方法。当然如果你觉得CXPButton有用的话,也可以把它的源文件保存下来,直接加入到自己的项目中。

一、准备工作

在开始编码之前,首先应该确定好,更准确的说应该是设计好按钮在各种状态下的外观。按钮控件的几中基本状态包括:

Normal状态,就是按钮一开始显示时的样子。

Over状态,鼠标指针移动到按钮上面时按钮显示的样子。

Down状态,按下按钮时显示的样子。

Focus状态,按钮按下后松开的样子,例如标准按钮按下松开之后会看到按钮内部有一个虚线框。

Disable状态,当然就是按钮被设置成无效的时候的样子啦。

我参考了一下WindowsXP中普通按钮的实际样子,设计出XP按钮各种状态的外观,如下图所示:


至于Down状态主要是在Over状态的基础上将文字往右下的方向稍微平移,以实现下压的效果。

二、实现原理及难点

下面我们开始类的创建,在Workspace的ClassView页中右击列表树的根结点,选择New Class…


在弹出窗口中进行派生类的定义,如下图所示,注意,你需要填写的只有Name和Base class两项,其余的选项保持默认值就可以了。

时间: 2024-10-31 18:14:27

自绘按钮的实现的相关文章

MFC自绘按钮的实现

自绘按钮的实现过程 申明自绘属性 进行VM_MESUREITEM事件响应,说明按钮的尺寸 进行VM_DRAWITEM消息的重新响应,说明如何绘制按钮 首先在vc6中新建工程,选择MFC并且新建dialog工程 输入工程名,然后将生成的按钮等删除,重新添加两个按钮. 为按钮设置属性 选择自绘,就是自己向上贴图 在dlg类的对象上添加WM_DRAWITEM属性 在生成的OnDrawItem方法中添加如下代码 //添加绘图函数 void CMy40_mybuttonDlg::OnDrawItem(in

自绘按钮补遗

(包括:改进后的CXPButton类.练习程序.练习程序答案) 在<自绘按钮的实现>一文中所示范的CXPButton按钮从形状上看可以说是一个不规则按钮.我们把MFC中提供的控件成为标准控件,而其中的按钮控件则可称为规则按钮,因为它是的形状是一个规则的矩形.但是随着流线型设计在界面设计中被广泛采用,越来越多的程序设计者都乐意在自己的作品中加入一些非规则形状的控件.以按钮为例,最简单的就到有圆形按钮,三角按钮等.下图是一组定义好的圆形按钮: 但是这些在我们眼中似乎呈现出不规则形状的按钮,有时候的

VC用Win API实现自绘按钮类

俗话说佛要金装.人要衣装,作软件的当然得要个好界面啦^_^.网上提供的控件自绘基本上是MFC或WTL封装好的类,对于不想用MFC的人来说是一无是处的,我可是WIN32API的坚决拥护者.因为MFC等也是用WIN32API封装起来的,学好了WIN32API,可以深入的了解WINDOWS内部的机制,编写出来的程序才能得到更好的优化. 下面分析一下自绘按钮的原理,用过MFC自绘按钮的人都知道,是通过重载了父窗口WM_DRAWITEM的响应消息实现的.同时也要子类化按钮来得到按钮的其他有用的消息,比如W

重绘按钮之后在按钮上添加背景图变形

问题描述 g.DrawImage(image,newRectangleF(rect.X,rect.Y,rect.Width,rect.Height)); 想达到zoom效果 解决方案 本帖最后由 yiyuntm 于 2016-05-14 13:35:30 编辑解决方案二:哪有图片拉伸不变形的道理?..解决方案三:引用1楼crystal_lz的回复: 哪有图片拉伸不变形的道理?.. 这是没有重写过的Button解决方案四:简单的说,就是'等比例'缩放.拿出铅笔和纸张,认真一些就可以解决.解决方案五

VC++ WIN32 sdk实现按钮自绘详解 之二.

网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片:    首先建立一个标准的Win32 Application 工程.选择a simple Win32 Application. 然后建立我们的资源文件首先新建一个对话框资源,资源ID改为IDD_MAIN_DLG 然后在其上新建一个按钮控件资源ID改为IDC_ODBUTTON,此按钮的styles中必须选中owenerdraw属性. 然后将其保存为.rc的资源文件.并将其导入我们的工程.同理新

巧用WPS移动版添加文档手绘批注

办公室一族,对Word文档的批注与修订功能简直再熟悉不过了,每天都在用.阿mo发现WPS移动版把word批注功能升级为手写批注,在手机.平板等触屏设备上用起来更方便.更人性化.下面阿mo就来告诉大家,如何利用WPS移动版手绘功能,快速完成文档的批注工作! 如果你的手机或平板为安卓平台,不妨下载并安装WPS移动版.运行后打开要批注的Word文档,手指在导航栏上向左滑动到"编辑"区域.或许此时大家会说,是不是选择"批注与修订"?阿mo要告诉你,NO!应该点"插

MFC自绘控件学习总结

前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或者有更好的方法,请不吝赐教. 我的机器环境是:Windows7旗舰版 Service Pack 1,Visual studio 2005 1).重绘某个控件时,强烈推荐使用子类化方法,比如想自绘Button控件, 首先添加自己的类CMYButton 继承自 CButton ,声明一个CMYButto

标准控件的使用技巧与自绘控件

在您决定开发 Windows 提供的常规免费自定义控件范围之外的控件之后,您必需确定自己的控件将有多少独到之处 - 在功能和外观两方面.例如,我们假定您正在创建一个类似于计速表的控件.由于公共控件库 (ComCtrl32.dll) 中没有类似的控件,您完全需要自己进行以下操作:编写所有控件功能需要的代码,进行绘制,默认终端用户的交互,以及控件与其父窗口之间需要的任意消息处理. (#add 两方面,公共控件库中没有类似的 完全重写;  只想调整公共控件功能,则可以部分修改) 另一方面,还包括一些您

MFC自绘控件学习总结第二贴---转

首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/20110710/19/5209f358-31c8-4057-b108-02155a417fd0.html 1).补充个高级可重载函数PreSubclassWindow(),我的理解是允许用户在子类化之前再做一额外些处理 ,这个重载函数也是非常重要的,要引起相当的注意.可以在这里改变控件的大小,位置,窗口样式,字