使用 轻松实现按钮控件自绘
下载源代码
在我的上一篇文章VCNET简单实现GIF动画中大家已经看到 框架的易用性了这一回我想说说 控件的自绘同样比 MFC 的控件自绘要轻松许多我们就拿最常用的 Button 控件下手吧
启动 创建项目
添加Form_Load消息
添加控件响应消息
添加代码
我们首先改变按钮的外观把它变成圆的然后利用鼠标消息改变按钮的状态注意我这里偷了个懒当按钮获得焦点时没有显示出选中框(就是大家选中一个东西时边缘上的那个虚线框)大家如果觉得那个虚线很必要可以自己在按钮获得焦点时画个虚线上去也可以将按钮的普通状态保存成位图然后在该位图上画好虚线并另存一下在按钮获得焦点时显示那个有虚线的图失去焦点则换回原图即可十分简便
private: System::Void Form_Load(System::Object * sender System::EventArgs * e) {//先创建路径在路径中画个椭圆然后用这个路径创建区域最后把区域给按钮并设置按钮的范围 System::Drawing::DrawingD::GraphicsPath *path=new System::Drawing::DrawingD::GraphicsPath();//创建路径 path>AddEllipse(Rectangle());//在路径中画椭圆 System::Drawing::Region *reg=new System::Drawing::Region(path);//利用路径创建区域 button>Bounds=System::Drawing::Rectangle();//设定按钮显示位置和最大响应范围只能是矩形 button>Region=reg;//设定按钮的实际控制区域可以是任意形状 } //下面的内容就简单了设置按钮在不同状态下的不同样式没有响应焦点状态就当作留给读者的作业吧^_^ private: System::Void button_MouseDown(System::Object * sender System::Windows::Forms::MouseEventArgs * e) { button>Image=Image::FromFile("bitmapbmp"); } private: System::Void button_MouseUp(System::Object * sender System::Windows::Forms::MouseEventArgs * e) { button>BackColor=SystemColors::AppWorkspace; button>Image=NULL; } private: System::Void button_MouseEnter(System::Object * sender System::EventArgs * e) { button>BackColor=SystemColors::AppWorkspace; button>Image=NULL; } private: System::Void button_MouseLeave(System::Object * sender System::EventArgs * e) { button>BackColor=SystemColors::ActiveBorder; button>Image=NULL; }
好了
就这么简单
是不是比 MFC 的按钮自绘要容易的多呢?不过 MFC
中提供的 CBitmapButton 使用起来也同样简单
大家感兴趣的可以试一下
可是其它的 MFC 控件就没那么幸运了:( 而 控件的自绘则基本都如此篇所述