博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC自绘按钮的实现
阅读量:6078 次
发布时间:2019-06-20

本文共 1591 字,大约阅读时间需要 5 分钟。

自绘按钮的实现过程

  • 申明自绘属性
  • 进行VM_MESUREITEM事件响应,说明按钮的尺寸
  • 进行VM_DRAWITEM消息的重新响应,说明如何绘制按钮

首先在vc6中新建工程,选择MFC并且新建dialog工程

输入工程名,然后将生成的按钮等删除,重新添加两个按钮。

为按钮设置属性

选择自绘,就是自己向上贴图

在dlg类的对象上添加WM_DRAWITEM属性

在生成的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://vkogx.baihongyu.com/

你可能感兴趣的文章
[HDU2222] Keywords Search
查看>>
射极跟随器的设计及参数确定
查看>>
电脑硬盘空间怎么越来越小
查看>>
android SystemUI导入eclipse 编译
查看>>
架构师速成-架构体系
查看>>
用minGW编译ffmpeg(供替换opencv中引用的ffmpeg库)
查看>>
MySQL多实例配置
查看>>
Nginx 一个高性能的HTTP和反向代理服务器
查看>>
IT男剁手指南:花钱也是一门大学问
查看>>
扒一扒程序员们最爱的网络游戏
查看>>
打造最舒适的webview调试环境
查看>>
ArcGIS——2015年中国各省GDP总量分级图(6等级)
查看>>
关联规则挖掘(二):Apriori算法
查看>>
谷歌技术"三宝"之BigTable
查看>>
CAFFE安装(7):Matlab环境
查看>>
caringorm3学习
查看>>
malloc是我的大麻烦,一不小心就栽倒
查看>>
ZJUT OJ 1007
查看>>
NFS安装配置
查看>>
使用Virtual Audio Cable软件实现电脑混音支持电脑录音
查看>>