//我发现pSubclassWnd->m_pOldWndProc为NULL了,为何  ?怎么解决
class CSubclassWnd 
{
//...
friend LRESULT CALLBACK HookWndProc( HWND , UINT ,WPARAM ,LPARAM) ;
protected:
WNDPROC m_pOldWndProc ;}LRESULT CALLBACK HookWndProc( HWND hwnd, UINT msg ,WPARAM wp,LPARAM lp) 
{
//...
}Add(HWND hwnd, CSubclassWnd* pSubclassWnd)
{
ASSERT(hwnd && IsWindow(hwnd) ) ;pSubclassWnd->m_pOldWndProc=(WNDPROC) SetWindowLong( hwnd , DWL_DLGPROC,(DWORD)HookWndProc);//我发现pSubclassWnd->m_pOldWndProc为NULL了,为何  ?怎么解决
if(pSubclassWnd->m_pOldWndProc ==NULL)
AfxMessageBox("NULL") ;
}

解决方案 »

  1.   

    If the function fails, the return value is zero. To get extended error information, call GetLastError
      

  2.   

    获得的GetLastError值是1413我顶啊
      

  3.   

    晕啊~
    你提供的是窗口过程,而你在setwindowlong的参数却指定了对话框过程,当然错啦
    窗口过程跟对话框过程不是同一个东西来的对话框过程的原形是:
    INT_PTR CALLBACK DialogProc(HWND hwndDlg,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam
    );