WTL 控件自绘

一、自绘接口
        WTL提供的CCustomDraw,通过让控件继承CCustomDraw,可以实现控件的自绘。
 
二、自绘步骤
1. 派生新的控件类,同时继承CCustomDraw,比如:
    
class COwerTree :
        public CWindowImpl<COwerTree, CTreeViewCtrl>,  
        public CCustomDraw<COwerTree>
 
2. 添加Message Map
    
BEGIN_MSG_MAP(COwerTree)    
    REFLECTED_NOTIFY_CODE_HANDLER_EX(TVN_ITEMEXPANDING, OnItemExpanding)
    CHAIN_MSG_MAP_ALT(CCustomDraw<COwerTree>, 1)
    DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
 
3. 添加相应函数
// 自绘
LRESULT COwerTree::OnItemExpanding ( NMHDR* phdr )
{
    return FALSE;
}

DWORD COwerTree::OnPrePaint( int idCtrl, LPNMCUSTOMDRAW lpNMCD)

    return CDRF_NOTIFYITEMDRAW;
}

DWORD COwerTree::OnItemPrePaint( int idCtrl, LPNMCUSTOMDRAW lpNMCD)

    NMTVCUSTOMDRAW* pnmtv = (NMTVCUSTOMDRAW*) lpNMCD; 

    RECT rcItem = lpNMCD->rc ;          // Item的区域
    HDC  hdcItem =    lpNMCD->hdc ;  //  Item的dc

    POINT ptItem ; 
    ptItem.x = rcItem.left + 1 ; 
    ptItem.y = rcItem.top + 1 ; 

    UINT uFlags; 
    HTREEITEM hItem = HitTest(ptItem, &uFlags);  // Item 句柄
    if(!hItem) return CDRF_DODEFAULT;    
    // 在这里实现Item的自绘
    
    return CDRF_SKIPDEFAULT;  // 忽略系统的默认自绘
}
 
三、附件实现了简单的树控件的自绘
 

你可能感兴趣的:(职场,控件,休闲,wtl,自绘)