前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MFC自绘按钮的实现

MFC自绘按钮的实现

作者头像
cloudskyme
发布2018-03-19 18:34:31
1.7K0
发布2018-03-19 18:34:31
举报
文章被收录于专栏:cloudskymecloudskyme

自绘按钮的实现过程

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

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

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

为按钮设置属性

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

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

在生成的OnDrawItem方法中添加如下代码

代码语言:javascript
复制
//添加绘图函数
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);
}

编译运行,运行后得到效果如果所示

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-11-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com