MFC自绘按钮的实现
实现 按钮 mfc 自绘
2023-09-14 08:58:21 时间
进行VM_MESUREITEM事件响应,说明按钮的尺寸
进行VM_DRAWITEM消息的重新响应,说明如何绘制按钮
![](http://pic002.cnblogs.com/images/2010/133059/2010110522205275.jpg)
![](http://pic002.cnblogs.com/images/2010/133059/2010110522214269.jpg)
![](http://pic002.cnblogs.com/images/2010/133059/2010110522221698.jpg)
![](http://pic002.cnblogs.com/images/2010/133059/2010110522232239.jpg)
![](http://pic002.cnblogs.com/images/2010/133059/2010110522252913.jpg)
Qt编写自定义控件9-导航按钮控件 导航按钮控件,主要用于各种漂亮精美的导航条,我们经常在web中看到导航条都非常精美,都是html+css+js实现的,还自带动画过度效果,Qt提供的qss其实也是无敌的,支持基本上所有的CSS2属性,配合QPainter这个无敌大法工具,没有什么不能绘制的。
vc 按钮自绘 按钮自绘,将按钮区域分成三部分,左边、右边、中间都由贴图绘制,可用于手动进度条按钮,或者左右选择项按钮 cpp代码部分:
首先在vc6中新建工程,选择MFC并且新建dialog工程
![](http://pic002.cnblogs.com/images/2010/133059/2010110522205275.jpg)
输入工程名,然后将生成的按钮等删除,重新添加两个按钮。
![](http://pic002.cnblogs.com/images/2010/133059/2010110522214269.jpg)
为按钮设置属性
![](http://pic002.cnblogs.com/images/2010/133059/2010110522221698.jpg)
选择自绘,就是自己向上贴图
在dlg类的对象上添加WM_DRAWITEM属性
![](http://pic002.cnblogs.com/images/2010/133059/2010110522232239.jpg)
在生成的OnDrawItem方法中添加如下代码
//添加绘图函数 void CMy40_mybuttonDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) // TODO: Add your message handler code here and/or call default CDC ButtonDC; CBitmap bitmapTrans; BITMAP bmp; CDC mem; CRect rc; //得到用于绘制按钮的DC ButtonDC.Attach(lpDrawItemStruct- hDC); //准备用于向按钮区域传输位图 mem.CreateCompatibleDC( ButtonDC); //获取按钮所占的矩形大小 rc=lpDrawItemStruct- rcItem; //获取按钮目前所处的状态,根据不同的状态绘制不同的按钮 UINT state = lpDrawItemStruct- itemState; //如果按钮已经得到焦点,绘制选中状态下的按钮 if(state ODS_FOCUS) bitmapTrans.LoadBitmap(IDB_BITMAP1); bitmapTrans.GetBitmap( bmp); CBitmap *old=mem.SelectObject( bitmapTrans); //向按钮所在位置传输位图 //使用StretcnBlt的目的是为了让位图随按钮的大小而改变 ButtonDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom, mem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); mem.SelectObject(old); bitmapTrans.DeleteObject(); //设置文字背景为透明 ButtonDC.SetBkMode(TRANSPARENT); ButtonDC.DrawText("已选中", rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE); else bitmapTrans.LoadBitmap(IDB_BITMAP2); CBitmap *old2 = mem.SelectObject( bitmapTrans); bitmapTrans.GetBitmap( bmp); CBitmap *old=mem.SelectObject( bitmapTrans); ButtonDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom, mem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); ButtonDC.SetBkMode(TRANSPARENT); ButtonDC.DrawText("未选中", rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE); mem.SelectObject(old2); bitmapTrans.DeleteObject(); CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct); }
编译运行,运行后得到效果如果所示
![](http://pic002.cnblogs.com/images/2010/133059/2010110522252913.jpg)
Qt编写自定义控件9-导航按钮控件 导航按钮控件,主要用于各种漂亮精美的导航条,我们经常在web中看到导航条都非常精美,都是html+css+js实现的,还自带动画过度效果,Qt提供的qss其实也是无敌的,支持基本上所有的CSS2属性,配合QPainter这个无敌大法工具,没有什么不能绘制的。
vc 按钮自绘 按钮自绘,将按钮区域分成三部分,左边、右边、中间都由贴图绘制,可用于手动进度条按钮,或者左右选择项按钮 cpp代码部分:
相关文章
- C++STL——vector类与模拟实现
- 【使用Python实现算法】04 标准库(数据类型模块)
- MySQL两表联合查询:探讨其实现方式(mysql两表联合查询)
- 之宝Linux上使用Sftp命令实现安全文件传输(sftp命令linux)
- Linux系统中的COSH函数实现(linuxcos函数)
- Linux 挂载:实现快速系统接入(linux挂载系统)
- Linux远程监控技术:实现安全性高效管理(linux远程监控)
- MongoDB学习之路:实现数据存储新突破(mongodb学习)
- MFC应用连接Oracle数据库实现快捷数据处理(mfc连接oracle)
- 【群晖:实现 MySQL 数据管理功能】(群晖mysql)
- 使用MySQL实现静默安装:无需用户操作,轻松完成(mysql静默安装)
- 使用PHP驱动程序实现与SQL Server数据库的连接(php连接sqlserver)
- MFC与MySQL的融合:实现无缝数据访问(mfc与mysql)
- MySQL 两阶锁机制的实现原理简述(mysql 两阶锁)
- 用MYSQL技术轻松下载电影票,实现便捷观影体验(MYSQL下载电影票)
- 实现响应时间提升的Redis数据缓存技术(响应数据缓存到redis)
- 网页中实现浏览器的最大,最小化和关闭按钮
- JSP单选按钮验证、下拉框验证、复选框验证实现代码
- javascript单选按钮单击选中双击取消选择实现代码
- 用按钮控制iframe显示的网页实现方法
- 点击地图div上的按钮实现对地图数据的入库操作
- jqueryajax的success回调函数中实现按钮置灰倒计时
- AndroidImageButton自定义按钮的按下效果的代码实现方法分享
- 回车直接实现点击某按钮的效果即触发单击事件
- Jquery实现点击按钮,连续地向textarea中添加值的实例代码
- 获取当前点击按钮的id用this.id实现
- 用html5js实现点击一个按钮达到浏览器全屏效果
- VC实现批量删除指定文件的方法
- jQuery实现长按按钮触发事件的方法