У меня есть настраиваемый элемент управления, созданный с использованием CreateWindowEx со стилем WS_BORDER. Все работает отлично от границы, появляющейся в другом цвете для других элементов управления в диалоговом окне. Граница в моем контроле черная, другие элементы управления имеют синюю границу. Я попытался вызвать EnableThemeDialogTexture (_dialogHandle, ETDT_ENABLE) после создания элемента управления, а также логику от http://www.patchou.com/projects/richedit/, но безрезультатно. Я использую C++ и Winapi. то есть. нет MFC, нет .Net. Любое руководство очень ценится.Применение темы Windows к настраиваемому элементу управления с использованием стиля WS_BORDER
EDIT: Вот логика, которая работает для меня:
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);
Спасибо за ответ. Сейчас это работает. Я изменил свой пост выше, чтобы показать логику, которую я использую, на всякий случай, это помогает кому-то другому. – fhevol