MFC 按钮的自绘
2016-02-28 21:29
357 查看
主要就是在风格中选择所有者自绘
重载
DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 函数实现
下面是一个简单例子void CZButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType==ODT_BUTTON);
//控件类型
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
//获取hdc句柄
ASSERT(dc.GetSafeHdc()!=NULL);
RECT rect=lpDrawItemStruct->rcItem;//获取绘图范围,超过将不会显示
if(lpDrawItemStruct->itemState&ODS_SELECTED)//鼠标按下状态
{
dc.Draw3dRect(&rect,RGB(0,0,0),RGB(255,255,255));//绘制边框
}
else
{
dc.Draw3dRect(&rect,RGB(255,255,255),RGB(0,0,0));
}
dc.SetBkMode(TRANSPARENT);
HBITMAP m_bmp=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));//加载位图BITMAP bmpinfo;
GetObject(m_bmp,sizeof(bmpinfo),&bmpinfo);//获取位图信息
CDC memDC;
memDC.CreateCompatibleDC(dc);
memDC.SelectObject(m_bmp);
dc->StretchBlt(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
&memDC,0,0,bmpinfo.bmWidth,bmpinfo.bmHeight,SRCCOPY);
dc->SetBkMode(TRANSPARENT);//绘制位图
CString str;
GetWindowText(str);
//获取标签
dc->DrawText(str,&rect,DT_SINGLELINE|DT_VCENTER|DT_CENTER);//绘制文字
dc.DeleteDC();//释放hdc
return;
}
绘制位图和文字时都是在一个矩形内绘制,通过对矩形大小位置的改变,可以实现文字在图片上方或下等各种样式,根据鼠标进行变化
相关文章推荐
- cin,cin.get()和cin.getline()的学习
- OpenGL 画曲线
- uva 10892 素因子分解
- 【 AnglularJS】——核心特性之MVC & 模块化
- UINavigationController相关
- JavaScript系列(五:事件)
- VC6杂项整理
- 《二战简史》:简明扼要通俗易懂的专业著作,适合用来快速了解二战基本背景,4星推荐
- [android] 保存文件到手机内存
- CentOS6.5安装与配置Mysql数据库
- mysql集群搭建教程-基础篇
- Matlab 模块库建立 S函数心得 小记
- Git学习笔记之分支
- 【sql语句】好用的sql语句之项目数据库学习总结
- 控制台下文件结束符
- Java类加载器
- 有关上拉输入、下拉输入、推挽输出、开漏输出、复用开漏输出、复用推挽输出以及、浮空输入、模拟输入区别
- SVPullToRefresh[第三方]下拉刷新上拉加载使用
- 研究生期间有关语音识别方面资料的收集
- POJ Ultra-QuickSort 逆序数 树状数组 归并排序