记得刚学程序的时候,子类搞得它娘的挺高深,许就没明白,就是因为被吓到了,等到回过神来,就他娘的替换窗口过程嘛,妈的,搞得这么不明不白,祖宗的象形文字全忘了?
现在看drgon里的处理
//
// 子类化窗口,替换它的窗口过程
//
// Return
// 成功返回false,失败返回false
//
bool HwndHost::SubclassWindow()
{
UIASSERT( m_hWnd != NULL );
this->m_thunk.Init( &HwndHost::_WndProc, this );
WNDPROC pProc = this->m_thunk.GetWNDPROC();
this->m_oldWndProc = (WNDPROC)(LONG_PTR) ::SetWindowLong( m_hWnd, GWLP_WNDPROC, (LONG)(LONG_PTR)pProc);
this->OnSubclassWindow();
return true;
}
就是利用setwindowlong替换掉了窗口原有的处理过程,自己处理之后,再考虑要不要交给系统去默认处理,历史书上记载就这么回事