MSDN搜索WM_NCPAINT, CWnd下的是void NcPaint的, 还不知道WM_NCPAINT有ON_WM_NCPAINT()/afx viod OnNcPaint()和ON_MESSAGE(WM_NCPAINT, OnNcPaint) / afx LRESULT OnNcPaint(uint, wparam, lparam...)既然有了带参数的WM_NCPAINT,那有LRESULT OnPaint(UINT, WPARAM, LPARAM)吗, 如果有, 什么时候的处理需要用这个.什么时候用ON_WM_NCPAINT(), 什么时候用ON_MESSAGE(WM_NCPAINT) 有个规律吗.

解决方案 »

  1.   

    ON_MESSAGE(), ON_WM_NCPAINT() ==》 宏,MFC 都把这些东西封装好了,可以跳进去看一下源码。至于什么时候用,如果不需要用到函数的参数就用 ON_WM_NCPAINT() ==》viod OnNcPaint();
    否则用 ON_MESSAGE()==》 LRESULT OnNCPaint(WPARAM, LPARAM);
    #define ON_WM_NCPAINT() \
    { WM_NCPAINT, 0, 0, 0, AfxSig_vv, \
    (AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(void))&OnNcPaint },//...(void (AFX_MSG_CALL CWnd::*)(void))&OnNcPaint ==> viod OnNcPaint()
    #define ON_MESSAGE(message, memberFxn) \
    { message, 0, 0, 0, AfxSig_lwl, \
    (AFX_PMSG)(AFX_PMSGW)(LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM))&memberFxn },//... (LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM))&memberFxn  ==> LRESULT OnNCPaint(WPARAM, LPARAM)