OnCustomdraw与OnNMCustomdraw有什么分别,同样在IDC_LIST1(CListCtrl)上添加的消息处理..我就是不明白为什么会这样一来,因为他们的函数体不同:如下void ticdlg::OnNMCustomdrawList(NMHDR *pNMHDR, LRESULT *pResult)
{
 LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
...
另一个:
void CPanel2::OnCustomdrawList ( NMHDR* pNMHDR, LRESULT* pResult )
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );...
这里LPNMCUSTOMDRAW和NMLVCUSTOMDRAW又是什么区别呢能说说~怎样会产生这两个不同的函数体,和他们的意义  谢谢

解决方案 »

  1.   

    自己都算找到小小的头绪了..
    原来
    pLVCD->nmcd->* == pNMCD->*typedef struct tagNMCUSTOMDRAWINFO {
        NMHDR hdr;
        DWORD dwDrawStage;
        HDC hdc;
        RECT rc;
        DWORD_PTR dwItemSpec;
        UINT uItemState;
        LPARAM lItemlParam;
    } NMCUSTOMDRAW, *LPNMCUSTOMDRAW;typedef struct tagNMLVCUSTOMDRAW {
        NMCUSTOMDRAW nmcd;
        COLORREF clrText;
        COLORREF clrTextBk;
    #if (_WIN32_IE >= 0x0400)
        int iSubItem;
    #endif
    #if (_WIN32_IE >= 0x560)
        DWORD dwItemType;
        // Item Custom Draw
        COLORREF clrFace;
        int iIconEffect;
        int iIconPhase;
        int iPartId;
        int iStateId:
        // Group Custom Draw
        RECT rcText;
        UINT uAlign;
    #endif
    } NMLVCUSTOMDRAW, *LPNMLVCUSTOMDRAW;
    从两个结构体知道他们的包含关系..
      

  2.   

    不过对于他们的函数名多了个NM 是不是关于他的消息处理呢..难道这样那么没有NM的就不时关于那个CUSTOMDRAW的消息处理...
    有点糊涂..
      

  3.   

    一个是直接添加NM_CUSTOMDRAW消息响应的结果,一个是重载虚拟函数的结果。