在OnPaint里画即可,我写段代码给你参考,你看就知道怎么弄了,不用我多说
关键是你要知道CCommandBarCtrl这个类的消息链class CSkinToolBarCtrl : public CCommandBarCtrlImpl<CSkinToolBarCtrl>
{
public: DECLARE_WND_SUPERCLASS(_T("WTL_ToolBarCtrl"), GetWndClassName()) BEGIN_MSG_MAP(CSkinToolBarCtrl)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
// chain to base classes
CHAIN_MSG_MAP(CCommandBarCtrlImpl<CSkinToolBarCtrl>)
ALT_MSG_MAP(1)
CHAIN_MSG_MAP_ALT(CCommandBarCtrlImpl<CSkinToolBarCtrl>, 1)
ALT_MSG_MAP(2)
CHAIN_MSG_MAP_ALT(CCommandBarCtrlImpl<CSkinToolBarCtrl>, 2)
ALT_MSG_MAP(3)
CHAIN_MSG_MAP_ALT(CCommandBarCtrlImpl<CSkinToolBarCtrl>, 3)
END_MSG_MAP() LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
{
CPaintDC dc(m_hWnd);

                 DWORD  nHotItem = GetHotItem();
int nItemCount = GetButtonCount(); for (int i=0;i<nItemCount;++i)
{
TBBUTTONINFO pbtnifo;
ZeroMemory(&pbtnifo,sizeof(TBBUTTONINFO));
pbtnifo.cbSize = sizeof(TBBUTTONINFO);
            pbtnifo.dwMask = TBIF_BYINDEX|TBIF_STATE;
GetButtonInfo(i,&pbtnifo); CRect rect;
GetRect(i,&rect); TCHAR szText[256]={0};
            GetButtonText(i,szText);
CString strText=szText;
    
if (pbtnifo.fsState & TBSTATE_PRESSED)
{
}
else if(i == nHotItem)
{ } }

bHandled = TRUE;
return 0;
}};

解决方案 »

  1.   

        我之前就是用的OnPaint,因为在很多地方要重绘所有基本都重写这个消息,但是问题是,运行时间久了后,或者窗口打开多了后,出现窗口乱飞的现象! 我估计就是DC资源耗尽导致的!  尤其涉及到,鼠标判断热点、按下之类的事件要用GetDc ,虽然我严格检查代码有没有释放DC ,但是还是不能解决!
        也提醒那些遇到类似问题的朋友,尽量避免在不产生窗口绘制事件的时候使用GETDC之类的API去画,非常不环保。
        经过摸索,我直接在主窗口WTL的CMainFrame类处理了
    NOTIFY_CODE_HANDLER(NM_CUSTOMDRAW, OnCustomDraw) 
      然后在里面判断子窗口。其实可以在子窗口处理,以后会把它移过去。因为主窗口的代码太多显得很凌乱。
    事实上这样处理之后,问题终于解决了,不过现在还有一个问题就是:
    代码里我有个这样的类
    class CTabCtrlEx:public CWindowImpl<CTabCtrlEx,CTabCtrl>,public CCustomDraw<CTabCtrlEx>
    继承了WTL提供的CTabCtrl 但是我发现这小子居然收不到自绘消息,经过分析WTL库的代码我发现它就是直接继承的CWindow
    typedef CTabCtrlT<ATL::CWindow>   CTabCtrl;
    ->再往里面就是
    class CTabCtrlT : public TBase
    所以我判断它其实就是一个普通的窗口,只能处理OnPaint了。
    实际上网上有自绘的CTabCtrl,里面的结构也更接近WINDOWS的TAB,但为了省事就免了
      

  2.   

    CTabCtrl 自绘要设置一下属性TCS_OWNERDRAWFIXED