关于dragon的wndproce
来源:互联网 发布:校园二手网站 c 源码 编辑:程序博客网 时间:2024/05/14 07:38
界面库分析有个必需的方法,就是找窗口函数,一般情况下,作者都会命名为wndproce,引用"志乃"的话说,要问为什么的话,因为我就是这么干的,不妨使用understand找找看,一不小心还真的找到了。
LRESULT HwndHost::_WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){HwndHost* pThis = (HwndHost*)hwnd;return LRESULT HwndHost::_WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){<span style="white-space:pre"></span>HwndHost* pThis = (HwndHost*)hwnd;<span style="white-space:pre"></span>return pThis->WndProc( uMsg, wParam, lParam );}}这里调用了
pThis->WndProc( uMsg, wParam, lParam );
<pre name="code" class="cpp">////[private] LRESULT WndProc( UINT uMsg, WPARAM wParam, LPARAM lParam )////窗口被子类化过之后的窗口过程//LRESULTHwndHost::WndProc( UINT uMsg, WPARAM wParam, LPARAM lParam ){switch(uMsg){case WM_SETFOCUS:{this->SetFocus(true);WindowBase* pWindow = this->GetWindowObject();if (pWindow){pWindow->GetMouseMgr()->SetFocusObjectDirect(this);::UISendMessage(this, WM_SETFOCUS, (WPARAM)pWindow->GetMouseMgr()->GetOldFocusObject(),0 );}}break;case WM_KILLFOCUS:{this->SetFocus(false);WindowBase* pWindow = this->GetWindowObject();if (pWindow){::UISendMessage(this, WM_KILLFOCUS, (WPARAM)pWindow->GetMouseMgr()->GetFocusObject(),0 );}}break;case WM_NCDESTROY:{LRESULT lRet = DefWindowProc(uMsg,wParam,lParam);this->UnSubclassWindow(); // 会清空 oldwndproc,因此先调用默认过程m_hWnd = NULL;return lRet;}break; case WM_STYLECHANGED: { UpdateTabStopStyle(); } break; case WM_WINDOWPOSCHANGED: { UIASSERT(m_pParent); if (m_pParent->GetObjectType() == OBJ_WINDOW) // 直接放在了父窗口下面 { ::GetWindowRect(m_hWnd, &m_rcParent); HWND hWndParent = ::GetParent(m_hWnd); ::MapWindowPoints(NULL, hWndParent, (LPPOINT)&m_rcParent, 2); } else // 有可能是放在了一个panel下面 { RECT rcWindow; ::GetWindowRect(m_hWnd, &rcWindow); HWND hWndParent = m_pIHwndHost->GetHWND(); ::MapWindowPoints(NULL, hWndParent, (LPPOINT)&rcWindow, 2); m_pParent->WindowRect2ObjectClientRect(&rcWindow, &m_rcParent); } } break;}return DefWindowProc(uMsg,wParam,lParam);}
但是,到这个地方,还没有找到消息如何处理的,这里只是简单的处理了几个消息,那么其它的消息是如何处理的呢,请看后续文章
0 0
- 关于dragon的wndproce
- dragon的sendmessage
- Dragon 的博客建立了
- Open Blue Dragon的测试
- dragon中的IRootInterface的IRootInterface
- Blue Dragon的NOCFML标签
- Blue Dragon的RENDER函数
- DRAGON中edit数据的封装
- Dragon Maze -- BFS很好的应用
- Dragon的Android备忘录——开始
- 中国的人图腾是“龙LONG”,不是什么Dragon
- Open Blue Dragon,一个免费的cfm服务器
- hdu 4362 Dragon Ball 很裸的DP
- UVa 11292 The Dragon of Loowater 简单的比较题
- codechef Open the Dragon Scroll bitset容器的运用
- hdoj 3635 Dragon Balls 并查集的基本特征
- hdu 3635 Dragon Balls(并查集的各种应用)
- HDOJ-3635 Dragon Balls (并查集的查找)
- javax.mail包的官网下载地址
- Unity3D 4.6 新的UI系统
- 【坑】javascript中appName总是Netscape的原因
- UVA 10938 - Flea circus(dfs)
- coredata框架
- 关于dragon的wndproce
- 我的编程学习日志(2)--进制转换的优化
- C语言编程基础(数据类型、常量、变量)
- numpy中关于*和dot的区别
- Dom4J 新建、删除、增加、修改节点的简单Demo
- 游戏引擎架构
- 黑马程序员——内部类
- 各种排序的实现
- shell——切分文件名