Проблема с рисованием пользовательских элементов управления Windows - PullRequest
3 голосов
/ 11 марта 2011

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

A Windows ComboBox and my control that uses the ComboBox theme

На изображении выше показан стандартный 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;
}

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

Спасибо,

Джеймс

1 Ответ

4 голосов
/ 11 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...