MFC自绘按钮的实现
来源:互联网 发布:仙剑奇侠传5剧情知乎 编辑:程序博客网 时间:2024/05/16 10:55
自绘按钮的实现过程
- 申明自绘属性
- 进行VM_MESUREITEM事件响应,说明按钮的尺寸
- 进行VM_DRAWITEM消息的重新响应,说明如何绘制按钮
首先在vc6中新建工程,选择MFC并且新建dialog工程
输入工程名,然后将生成的按钮等删除,重新添加两个按钮。
为按钮设置属性
选择自绘,就是自己向上贴图
在dlg类的对象上添加WM_DRAWITEM属性
在生成的OnDrawItem方法中添加如下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//添加绘图函数
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);
}
编译运行,运行后得到效果如果所示
- MFC自绘按钮的实现
- MFC下按钮自绘的实现
- MFC 自绘按钮的实现
- MFC自绘按钮的实现
- MFC 自绘按钮的实现
- MFC下按钮自绘的实现
- MFC 按钮的自绘
- VC自绘按钮的实现(NO MFC)
- MFC下按钮自绘的实现(一)
- MFC下按钮自绘的实现(二)
- MFC下按钮自绘的实现(三)
- MFC下按钮自绘的实现(四)
- VC自绘按钮的实现(NO MFC)
- MFC自绘按钮的实现(不断更新)
- MFC + CxImage 实现自绘半透明按钮
- MFC + CxImage 实现自绘半透明按钮
- mfc 按钮自绘
- MFC的自绘位图按钮
- 43-HTML中选择器优先级比较
- hdu 1987 How many ways (两种解法 1.搜索 2.dp)
- Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存
- Windows下虚拟机VMware通过NAT联网设置
- ARM下一些常用库的移植
- MFC自绘按钮的实现
- 买手机 你要关注的
- 搜索格局生变:搜狗欲联手腾讯挑战360地位
- 游戏开发中众多角色状态管理方法思考
- 线程同步
- iOS7正式版发布:下载地址及更新教程
- 模拟退火法 --- matlab
- MD5 加密,实例展示step by step
- Android中对付ANR的N种武器