Проблема с отрисовкой пользовательских элементов управления Windows

Я играю с рисованием своих собственных элементов управления с помощью библиотеки uxTheme в Windows и не могу понять, почему мой элемент управления не похож на обычный элемент управления Windows, который (предположительно) использует ту же тему, что и я:

Windows ComboBox и мой элемент управления, использующий тему ComboBox

На изображении выше показан стандартный Windows ComboBox (вверху) и мой пользовательский элемент управления, нарисованный с использованием темы ComboBox (внизу). Чего я не могу понять, так это того, почему граница моего элемента управления отличается по форме и цвету от стандартного элемента управления.

В моем конструкторе класса я открываю данные темы:

mComboTheme = OpenThemeData( hwnd, L"COMBOBOX" );

А потом в обработчике для WM_PAINT я просто рисую две части компонентов ComboBox:

case WM_PAINT:
{
    PAINTSTRUCT ps;
    HDC         hdc;
    RECT        client;

    if( GetUpdateRect( hwnd, &ps.rcPaint, false ))
    {
        hdc = BeginPaint( hwnd, &ps );
        GetClientRect( hwnd, &client );

        if( IsThemeBackgroundPartiallyTransparent( mComboTheme, CP_BACKGROUND, CBXS_HOT ))
        {
            DrawThemeParentBackground( hwnd, hdc, &ps.rcPaint );
        }
        DrawThemeBackground( mComboTheme, hdc, CP_BACKGROUND, CBXS_HOT, &client, &ps.rcPaint );
        client.left = client.right - 20;
        DrawThemeBackground( mComboTheme, hdc, CP_DROPDOWNBUTTONRIGHT, CBXSR_HOT, &client, ps.rcPaint );

        EndPaint( *this, &ps );
    }
    break;
}

Мы будем очень признательны за любые предложения относительно того, почему эти два элемента управления не выглядят одинаково.

Спасибо,

Джеймс


person Community    schedule 11.03.2011    source источник
comment
все равно не хуже :)   -  person BlackBear    schedule 11.03.2011


Ответы (1)


Вы позвонили DrawThemeBackground с CP_BACKGROUND и CP_DROPDOWNBUTTONRIGHT. Возможно, вам также следует вызвать его с помощью CP_BORDER, если вы хотите, чтобы граница соответствовала стандартному выпадающему списку?

person Jon    schedule 11.03.2011
comment
Ха! Да, это был довольно очевидный момент, который я упустил. Спасибо. :) - person ; 11.03.2011