Вот выдержка из кода.
Стили панели инструментов перед созданием:
DWORD styles = TBSTYLE_FLAT | WS_CHILD | TBSTYLE_TOOLTIPS; //| TBSTYLE_CUSTOMERASE;//| WS_BORDER ;
DWORD cc_styles = CCS_VERT | CCS_NODIVIDER | CCS_NORESIZE;
Обработка NM_CUSTOMDRAW:
case WM_NOTIFY:
switch ( ((LPNMHDR)lparam)->code )
{
...
case NM_CUSTOMDRAW:
{
//LPNMHDR header_ptr = safe_ptr_cast< LPNMHDR >( &lparam );
//if ( header_ptr->hwndFrom == m_ptr->get_operation_tab_toolbar_handle( ) )
LPNMTBCUSTOMDRAW data_ptr = (LPNMTBCUSTOMDRAW) lparam;
switch(data_ptr->nmcd.dwDrawStage)
{
case CDDS_ITEMPREPAINT:
SetWindowTheme(m_ptr->get_operation_tab_toolbar_handle(), _T(""), _T(""));
//data_ptr->hbrMonoDither = GetStockBrush(BLACK_BRUSH);
SetBkColor( data_ptr->nmcd.hdc, RGB(0,0,0));
FillRect( data_ptr->nmcd.hdc, &data_ptr->nmcd.rc, RGB(0,0,0));
//FillRect( data_ptr->nmcd.hdc, &data_ptr->nmcd.rc, GetStockBrush(BLACK_BRUSH));
return CDRF_NEWFONT;
case CDDS_PREPAINT:
{
return CDRF_NOTIFYITEMDRAW;
}
}
}
}
Я получаю только CDDS_PREPAINT. В документации MSDN Custom Drawing Doc.
Говорят, что в возвращаемом значении CDRF_NOTIFYITEMDRAW CDDS_ITEMPREPAINT должен прийти следующим.
Когда панель инструментов создается с использованием стилей TBSTYLE_FLATE или TBSTYLE_TRANSPARENT либо TBSTYLE_TRANSPARENT, она использует родительский цвет фона. Таким образом, чтобы получить другой цвет фона для панели инструментов, следует использовать SetClassLongPtr (для совместимости 32x и 64x) для родительского окна. Таким образом, проблема решена.
Других решений пока нет …