关于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
原创粉丝点击