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

У меня есть пользовательский элемент управления, созданный с помощью CreateWindowEx со стилем WS_BORDER. Все работает отлично, за исключением того, что границы отображаются другим цветом в диалоговом окне. Граница моего элемента управления черная, остальные элементы управления имеют синюю рамку. Я попытался вызвать EnableThemeDialogTexture (_dialogHandle, ETDT_ENABLE) после создания элемента управления, а также логику из http://www.patchou.com/projects/richedit/ но безрезультатно. Я использую C ++ и Winapi. то есть. нет MFC, нет .Net. Любое руководство очень ценится.

РЕДАКТИРОВАТЬ: Вот логика, которая работала для меня:

HDC hdc = GetWindowDC(hwnd);
HTHEME themeHandle = OpenThemeData(hwnd, L"Edit");
if(themeHandle)
{
int cxBorder = GetSystemMetrics(SM_CXBORDER);
int cyBorder = GetSystemMetrics(SM_CYBORDER);
RECT rc;
GetClientRect(hwnd, &rc);
OffsetRect(&rc, cxBorder, cyBorder);
ExcludeClipRect(hdc, rc.left, rc.top, rc.right, rc.bottom);
InflateRect(&rc, cxBorder, cyBorder);
DrawThemeBackground(themeHandle, hdc, 0, 0, &rc, NULL);
CloseThemeData(themeHandle);
}

ReleaseDC(hwnd, hdc);

0

Решение

Вы должны нарисовать границу самостоятельно, используя тему из другого элемента управления (например, элемента управления listview или treeview). Для пользовательского дочернего элемента управления нарисовать границу довольно просто — просто обработайте сообщение WM_NCPAINT. Идентификатор детали и идентификатор состояния при рисовании границы должны быть равны 0.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector