Страница 1 из 1

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

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

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

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

Добавлено: 06 апр 2005, 13:39
Hawk
Есть такие сообщения, они шлются родительскому окну 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
Лучше конечно не создавать кисть в каждом сообщении т.к. она каждый раз создается заного и получается лик ресурсов, но для примера сойдет

Добавлено: 08 май 2005, 21:14
(GiG)*fh
Блин, чё-то не получается ни один из способов... Чё-нить другое не посоветуете?

Добавлено: 10 май 2005, 09:38
Hawk
Ну тогда тебе надо рисовать кнопку самому, глянь стиль BS_OWNERDRAW

Добавлено: 10 май 2005, 16:45
Romeo
Плохо пробуешь, если не получается. А ты в паренте это пишешь или в самом контроле?

re

Добавлено: 11 май 2005, 15:16
(GiG)*fh
В паренте

Добавлено: 12 май 2005, 16:43
Eugie
Для стандартых кнопок обрабатывать 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.