MFC下按钮自绘的实现(一)
来源:互联网 发布:中国电科14所招聘java 编辑:程序博客网 时间:2024/05/11 17:45
=============================================================
标题:MFC下按钮自绘的实现
摘要:
备注:MFC + VC2005
日期:2010.7.19
姓名:朱铭雷
=============================================================
在MFC下编程,很多时候对于标准的按钮控件不是很满意,想要弄的美观点。这就需要按钮自绘。这里简单记录一下方法,以免过个十天半个月的,自己又忘的一干二净了。
首先给工程添加一个MFC类,基类为CButton。要想让按钮具备自绘功能,就要为按钮添加BS_OWNERDRAW属性。为类CButton重载PreSubclassWindow虚函数。在该函数中添加如下一行代码:
ModifyStyle(0, BS_OWNERDRAW);
当按钮控件具有了自绘功能之后,每次控件状态改变都会触发DrawItem函数,在该函数中来绘制按钮的形态外观,所以第二步就要重载DrawItem虚函数。在这个函数中就可以自由发挥了,比如绘制外边框,底色,按钮标题,内边框等等。
一般都会为按钮定义几种不同状态时的外观,比如光标滑过时的状态,按钮按下时的状态,按钮禁用时的状态,以及按钮的正常状态等等。这就要为新的按钮添加几种重要的消息响应。比如WM_MOUSELEAVE消息,WM_MOUSEHOVER消息和WM_MOUSEMOVE消息等等,值得一提的是前两个消息的响应函数需要自己手动添加,微软提供了一个TrackMouseEvent函数在光标离开一个窗口时投递WM_MOUSELEAVE消息,光标滑过窗口时投递WM_MOUSEHOVER消息。一般来说可以在WM_MOUSEMOVE消息响应函数中调用TrackMouseEvent函数来投递WM_MOUSELEAVE消息和WM_MOUSEHOVER消息。然后在WM_MOUSELEAVE消息的响应函数中标记“光标已经离开按钮”,然后调用InvalidateRect函数让按钮重绘。在WM_MOUSEHOVER消息的响应函数中标记“光标正在按钮上方”,并调用InvalidateRect函数让按钮重绘。
典型代码:
if (!m_bTracking) // 判断此时按钮是否已经按下
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 1;
m_bTracking = _TrackMouseEvent(&tme);
}
这几天都是这么困,不知道是怎么搞的,呆会接着写。
- MFC下按钮自绘的实现(一)
- MFC下按钮自绘的实现
- MFC下按钮自绘的实现
- MFC下按钮自绘的实现(二)
- MFC下按钮自绘的实现(三)
- MFC下按钮自绘的实现(四)
- MFC自绘按钮的实现
- MFC 自绘按钮的实现
- MFC自绘按钮的实现
- MFC 自绘按钮的实现
- VC自绘按钮的实现(NO MFC)
- VC自绘按钮的实现(NO MFC)
- MFC自绘按钮的实现(不断更新)
- MFC 下自绘按钮
- MFC 按钮的自绘
- MFC + CxImage 实现自绘半透明按钮
- MFC + CxImage 实现自绘半透明按钮
- mfc 按钮自绘
- 查询mysql版本信息
- 通过meia encoder捕获桌面,带预览(可用)
- Linux常用头文件
- 超详尽的D608上传java 的方法!
- wr
- MFC下按钮自绘的实现(一)
- IPv6 on Your Mobile Phone
- prototype.js介绍
- 界面原形设计/UI原型设计
- 如何保护.net中的dll文件(防止破解、反编译dll)
- SqlDataReader 中的read 方法是什么意思?
- QString 类
- QString 类
- Qt实现areo毛玻璃效果的类,以及使用方法: