这个函数g了一下但还是不是很明白,
函数名的意思是此类在被子类化成父类的时候所要做的操作,但是还是有点迷糊。
比如
CMyButton:public CButton
在CMyButton没有被子类化之前它是什么,它仅仅是普通的C++类吧,...
都把自己搞晕了
函数名的意思是此类在被子类化成父类的时候所要做的操作,但是还是有点迷糊。
比如
CMyButton:public CButton
在CMyButton没有被子类化之前它是什么,它仅仅是普通的C++类吧,...
都把自己搞晕了
PreSubclassWindow是在CWnd::SubclassWindow中调用的,其目的是允许程序在动态子类化控件或窗口之前做一些其它所需要的动作,见下面代码。BOOL CWnd::SubclassWindow(HWND hWnd)
{
if (!Attach(hWnd))
return FALSE; // allow any other subclassing to occur
PreSubclassWindow(); // now hook into the AFX WndProc
WNDPROC* lplpfn = GetSuperWndProcAddr();
WNDPROC oldWndProc = (WNDPROC)::SetWindowLongPtr(hWnd, GWLP_WNDPROC,
(INT_PTR)AfxGetAfxWndProc());
ASSERT(oldWndProc != AfxGetAfxWndProc()); if (*lplpfn == NULL)
*lplpfn = oldWndProc; // the first control of that type created
#ifdef _DEBUG
else if (*lplpfn != oldWndProc)
{
TRACE(traceAppMsg, 0, "Error: Trying to use SubclassWindow with incorrect CWnd\n");
TRACE(traceAppMsg, 0, "\tderived class.\n");
TRACE(traceAppMsg, 0, "\thWnd = $%08X (nIDC=$%08X) is not a %hs.\n", (UINT)(UINT_PTR)hWnd,
_AfxGetDlgCtrlID(hWnd), GetRuntimeClass()->m_lpszClassName);
ASSERT(FALSE);
// undo the subclassing if continuing after assert
::SetWindowLongPtr(hWnd, GWLP_WNDPROC, (INT_PTR)oldWndProc);
}
#endif return TRUE;
}
与C++和类无关