当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 使用 VC.net 轻松实现按钮控件自绘

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 使用 VC.net 轻松实现按钮控件自绘


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 126 ::
收藏到网摘: n/a

使用 VC.net 轻松实现按钮控件自绘

作者:caeser2

下载源代码

  在我的上一篇文章“VC.NET简单实现GIF动画”中大家已经看到 .net 框架的易用性了,这一回我想说说 .net 控件的自绘,同样比 MFC 的控件自绘要轻松许多,我们就拿最常用的 Button 控件下手吧。

1、启动 VS.net,创建项目,




添加Form1_Load消息




添加控件,响应消息




2、添加代码

  我们首先改变按钮的外观,把它变成圆的,然后利用鼠标消息改变按钮的状态。注意我这里偷了个懒,当按钮获得焦点时没有显示出选中框(就是大家选中一个东西时边缘上的那个虚线框),大家如果觉得那个虚线很必要,可以自己在按钮获得焦点时画个虚线上去,也可以将按钮的普通状态保存成位图,然后在该位图上画好虚线并另存一下;在按钮获得焦点时显示那个有虚线的图,失去焦点则换回原图即可,十分简便。

 private: System::Void Form1_Load(System::Object * sender, System::EventArgs * e) {//先创建路径,在路径中画个椭圆,然后用这个路径创建区域,最后把区域给按钮并设置按钮的范围 System::Drawing::Drawing2D::GraphicsPath *path=new System::Drawing::Drawing2D::GraphicsPath();//创建路径 path->AddEllipse(Rectangle(10,10,80,80));//在路径中画椭圆 System::Drawing::Region *reg=new System::Drawing::Region(path);//利用路径创建区域 button1->Bounds=System::Drawing::Rectangle(50,50,100,100);//设定按钮显示位置和最大响应范围,只能是矩形 button1->Region=reg;//设定按钮的实际控制区域,可以是任意形状 }	//下面的内容就简单了,设置按钮在不同状态下的不同样式,没有响应焦点状态,就当作留给读者的作业吧^_^	private: System::Void button1_MouseDown(System::Object * sender, System::Windows::Forms::MouseEventArgs * e) { button1->Image=Image::FromFile("bitmap.bmp"); }	private: System::Void button1_MouseUp(System::Object * sender, System::Windows::Forms::MouseEventArgs * e) { button1->BackColor=SystemColors::AppWorkspace; button1->Image=NULL; }	private: System::Void button1_MouseEnter(System::Object * sender, System::EventArgs * e) { button1->BackColor=SystemColors::AppWorkspace; button1->Image=NULL; }	private: System::Void button1_MouseLeave(System::Object * sender, System::EventArgs * e) { button1->BackColor=SystemColors::ActiveBorder; button1->Image=NULL; }

  好了,就这么简单,是不是比 MFC 的按钮自绘要容易的多呢?不过 MFC7.0 中提供的 CBitmapButton 使用起来也同样简单,大家感兴趣的可以试一下。可是其它的 MFC 控件就没那么幸运了:( 而 .net 控件的自绘则基本都如此篇所述。