这个函数g了一下但还是不是很明白,
函数名的意思是此类在被子类化成父类的时候所要做的操作,但是还是有点迷糊。
比如
CMyButton:public CButton 
在CMyButton没有被子类化之前它是什么,它仅仅是普通的C++类吧,...
都把自己搞晕了

解决方案 »

  1.   

    这只是MFC内部机制而以,和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;
    }
      

  2.   

    我也没有搞明白,请大虾们多指教,我是在重画BUTTON时候遇到的此类问题
      

  3.   

    http://apps.hi.baidu.com/share/detail/46327094
      

  4.   

    This member function is called by the framework to allow other necessary subclassing to occur before the window is subclassed. 
      

  5.   

    MFC中如果一个窗口的窗口函数被MFC替换成MFC的窗口处理函数AfxWndProc前,必然会调用这个CWnd::presubclasswindow。这包括在MFC显式创建的窗口和隐式创建的控件窗口。对于显式创建的窗口由窗口创建hook调用,对于先生成后子类化的控件是在第一次处理DDX_CONTROL时
      

  6.   

    子类化是MFC的东西
    与C++和类无关