//我发现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") ;
}
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") ;
}
你提供的是窗口过程,而你在setwindowlong的参数却指定了对话框过程,当然错啦
窗口过程跟对话框过程不是同一个东西来的对话框过程的原形是:
INT_PTR CALLBACK DialogProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);