我用了 WH_CALLWNDPROC ,钩子函数中
CWPSTRUCT* cwps = (CWPSTRUCT*)lParam;
if( cwps->message == WM_PAINT )
TRACE(_T("PM_REMOVE----------------WM_PAINT .\r\n"));但是对话框调用 OnPaint 了,在钩子函数中始终未 cwps->message == WM_PAINT 为真。

解决方案 »

  1.   

    不是 TRACE(),漏掉输出的问题,
    在TRACE处设置了断点根本不过去,第一次显示对话框会捕获到,以后再刷新窗口时 OnPaint调用了,但是钩子函数中没有捕获 WM_PAINT ,钩子设置是成功的 可以正确捕获 WM_ERASEBKGND .
      

  2.   

    ::SetWindowLong(m_flashPlayer.GetSafeHwnd(),GWLP_WNDPROC,(LONG)YourWindowProc);
    在YourWindowProc中处理就行
      

  3.   

    请给出一下 wParam 和 lParam 的解释,是什么结构的指针?
      

  4.   

    typedef   UINT   WPARAM;
    typedef   LONG   LPARAM;
      

  5.   

    请给出一下 wParam 和 lParam 的解释,是什么结构的指针?
    随你,一般在lParam指向一个指针参数,强制转换一下就行了。
      

  6.   

    WH_GETMESSAGE
    刚用这个试过,绝对可以捕到wm_paint
      

  7.   

    好象创建时的WM_PAINT是肯定能获得的!
    不过子类化指定窗口
    应该可以获得的!
    WNDPROC wpOrigProc; wpOrigProc = (WNDPROC)::SetWindowLong(hWnd, 
                    GWL_WNDPROC, (LONG)SubclassProc); 子类化的窗体处理函数
    LRESULT APIENTRY SubclassProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 

        if (uMsg == WM_PAINT) 
        {
        } 
     
        return CallWindowProc(wpOrigProc, hwnd, uMsg, 
            wParam, lParam); 
    } 至于你说的那个为什么不好使,我也不怎么清楚!
    CSDN上有这样一句话!但是我没怎么看明白!如果有高手路过的话,帮忙解释下!^_^
    The system sends an internal WM_PAINT message only once. After an internal WM_PAINT message is returned from GetMessage or PeekMessage or is sent to a window by UpdateWindow, the system does not post or send further WM_PAINT messages until the window is invalidated or until RedrawWindow is called again with the RDW_INTERNALPAINT flag set. 
      

  8.   

    感谢 zhejiang9(麻花!大花裤衩!)  提供了重要线索.
      

  9.   

    An application must check for any necessary internal painting by looking at its internal data structures for each WM_PAINT message, because a WM_PAINT message may have been caused by both a non-NULL update region and a call to RedrawWindow with the RDW_INTERNALPAINT flag set.
      

  10.   

    分的分配是因为下面这段:The system sends an internal WM_PAINT message only once. After an internal WM_PAINT message is returned from GetMessage or PeekMessage or is sent to a window by UpdateWindow, the system does not post or send further WM_PAINT messages until the window is invalidated or until RedrawWindow is called again with the RDW_INTERNALPAINT flag set. 
      

  11.   

    没呢,  zhejiang9(麻花!大花裤衩!)     提供了重要线索,很有参考价值,如果哪位能够解决的话短信息通知我,我另外开贴.