CWnd::WindowProc的理解
来源:互联网 发布:英伟达游戏优化 编辑:程序博客网 时间:2024/05/17 06:10
先帖一段源代码
LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){// OnWndMsg does most of the work, except for DefWindowProc callLRESULT lResult = 0;if (!OnWndMsg(message, wParam, lParam, &lResult))lResult = DefWindowProc(message, wParam, lParam);return lResult;}
新建一对话框程序CTestDlg,在其中添加 class CMyButton : public CButton{};
#include "stdafx.h"#include "TestCom.h"#include "MyButton.h"// CMyButtonIMPLEMENT_DYNAMIC(CMyButton, CButton)CMyButton::CMyButton(){}CMyButton::~CMyButton(){}BEGIN_MESSAGE_MAP(CMyButton, CButton)ON_WM_MOUSEMOVE()END_MESSAGE_MAP()// CMyButton message handlersvoid CMyButton::OnMouseMove(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultTRACE(L"CMyButton::OnMouseMove\n");CButton::OnMouseMove(nFlags, point);}BOOL CMyButton::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult){// TODO: Add your specialized code here and/or call the base classif (message == WM_MOUSEMOVE) {int a = 20;}return CButton::OnWndMsg(message, wParam, lParam, pResult);}
此时,因为你重载了OnMouseMove,修改了消息映射地图,那么在CMyButton接收MouseMove消息的时候,会映射到
CMyButton::OnMouseMove,但是CMyButton::OnMouseMove由CButton::OnMouseMove默认处理。然后CWnd::OnWndMsg
直接返回TRUE;那么CWnd::WndProc下面的
lResult = DefWindowProc(message, wParam, lParam);
便不会再执行了
反之,倘若你没重载WM_MOUSEMOVE消息(只要注释ON_WM_MOUSEMOVE()即可)。那么OnWndMsg会返回FALSE,表明用户
没有修改消息映射,然后
lResult = DefWindowProc(message, wParam, lParam);
会被执行,设定按钮状态。
但是请注意:CButton::OnMouseMove最终还是会调用CWnd::DefWindowProc这个函数,这个函数的实现如下:
LRESULT CWnd::DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam){if (m_pfnSuper != NULL)return ::CallWindowProc(m_pfnSuper, m_hWnd, nMsg, wParam, lParam);WNDPROC pfnWndProc;if ((pfnWndProc = *GetSuperWndProcAddr()) == NULL)return ::DefWindowProc(m_hWnd, nMsg, wParam, lParam);elsereturn ::CallWindowProc(pfnWndProc, m_hWnd, nMsg, wParam, lParam);}
看到没,::CallWindowProc(m_pfnSuper, m_hWnd, nMsg, wParam, lParam);
这个API最终来设定按钮在鼠标移动上去该显示的状态。
- CWnd::WindowProc的理解
- CWnd::WindowProc的理解
- CWnd::WindowProc
- 拥塞窗口cwnd的理解
- 谈谈WindowProc的使用
- WindowProc的使用
- WindowProc()
- PreTranslateMessage 与 WindowProc 的关系
- PreTranslateMessage 与 WindowProc 的关系
- PreTranslateMessage 与 WindowProc 的关系,
- WindowProc和DefWindowProc的区别
- PreTranslateMessage 与 WindowProc 的关系
- PreTranslateMessage与WindowProc的区别
- WindowProc和DefWindowProc的区别
- PreTranslateMessage 与 WindowProc 的关系
- PreTranslateMessage 与 WindowProc 的关系
- 有趣的CWnd::WalkPreTranslateTree
- CWnd 、CWindow 的区别
- Pogoplug为移动用户推出5GB免费云存储服务
- 2011-11-15阅读英文资料学习的单词。
- HTML 4.0 事件属性
- ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS
- 认识程序集
- CWnd::WindowProc的理解
- UIWEBVIEW 与JS 如何回调交互
- test
- HTML5 Canvas 逐帧动画的实现
- 从重构到模式-使用策略模式扫描文件夹
- php class中public,private,protected的区别,以及实例
- sharepoint 部署的solution状态一直是False
- php簡繁體轉換
- jspsmart 上传图片