C++ Как изменить цвета контролов методами WinAPI?

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: C++ Как изменить цвета контролов методами WinAPI?

Eugie » 12 май 2005, 16:43

Для стандартых кнопок обрабатывать WM_CTLCOLORBTN смысла мало: все равно будет использован системный цвет,
цитата:
Buttons with the BS_PUSHBUTTON, BS_DEFPUSHBUTTON, or BS_PUSHLIKE styles do not use the returned brush. Buttons with these styles are always drawn with the default system colors. Drawing push buttons requires several different brushes-face, highlight and shadow-but the WM_CTLCOLORBTN message allows only one brush to be returned. To provide a custom appearance for push buttons, use an owner-drawn button.
Т.е. придется рисовать кнопку самому, используя стиль BS_OWNERDRAW, либо примерно то же самое с помощью subclassing.

re

(GiG)*fh » 11 май 2005, 15:16

В паренте

Romeo » 10 май 2005, 16:45

Плохо пробуешь, если не получается. А ты в паренте это пишешь или в самом контроле?

Hawk » 10 май 2005, 09:38

Ну тогда тебе надо рисовать кнопку самому, глянь стиль BS_OWNERDRAW

(GiG)*fh » 08 май 2005, 21:14

Блин, чё-то не получается ни один из способов... Чё-нить другое не посоветуете?

Hawk » 06 апр 2005, 13:39

Есть такие сообщения, они шлются родительскому окну WM_CTLCOLOR... для многих контролсов свои (для кнопок WM_CTLCOLORBTN). Они и предназначены для изменения стандартных цветов.

Код: Выделить всё

  HDC hdcButton = (HDC) wParam; 
  HWND hwndButton = (HWND) lParam;
  SetTextColor(hdcButton, RGB(255,0,0)); // Set red color for text of the button
  SetBkMode(hdcButton, TRANSPARENT); // Don't use text backgrtound color
  return CreateSolidBrush(RGB(0,0,255)); // Return backround blue brush
Лучше конечно не создавать кисть в каждом сообщении т.к. она каждый раз создается заного и получается лик ресурсов, но для примера сойдет

Kolinus » 05 апр 2005, 19:19

на самом деле все просто - создаешь свой класс на основе стандартного и указываешь нужную тебе кисть в соотв поле WNDCLASSEX? а именно изменить - по моему через setwindowlong можно - где-то в инете я видел пример - поискай - найдешь

C++ Как изменить цвета контролов методами WinAPI?

iscan » 05 апр 2005, 16:28

По умолчанию, если поставить какой-нибудь контрол, например:
CreateWindow("button","",WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX|BS_DEFPUSHBUTTON|WS_BORDER,20,30,100,20,hWnd,(HMENU)ID_BUTTON,Inst,NULL);
то цвет его фона будет серый. Такими же получаются и кнопки.

Никак не могу найти где это поменять методами API.
(На форуме искал)

Вернуться к началу