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

VC++
面试题目:猫吃老鼠问题的求解
一个最基本的有限元计算程序
简单的表达式求值
C程序移植到VC开发环境下
一个小语言的词法分析程序
A/B 向上取整的方法
马走日棋盘算法
一种随机抽题的简单算法
clone模式在平衡排序二叉树实现中的应用
递归的应用 -- 最简单分形图形实现
比较数据排序前后的查找次数
根据前序和中序序列生成二叉树
如何用CZip/CUnzip类压缩/解压缩文件
使用 random_shuffle() 算法随机化序列元素
Ceb解除打印屏蔽实战
基于SHA-256的HMAC文件校验器
模拟信息加密流程图简介
关于数据校验
浅谈利用RSA算法防止非法注册机的制作
加密它:用新的高级加密标准(AES)保持你的数据安全

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 137 ::
收藏到网摘: 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 控件的自绘则基本都如此篇所述。