2013-01-06 4 views
0

У меня есть настраиваемый элемент управления, созданный с использованием 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); 

ответ

1

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

+0

Спасибо за ответ. Сейчас это работает. Я изменил свой пост выше, чтобы показать логику, которую я использую, на всякий случай, это помогает кому-то другому. – fhevol

 Смежные вопросы

  • Нет связанных вопросов^_^