C++ Как изменить цвета контролов методами WinAPI?
Модераторы: Duncon, Hawk, Romeo, Eugie
По умолчанию, если поставить какой-нибудь контрол, например:
CreateWindow("button","",WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX|BS_DEFPUSHBUTTON|WS_BORDER,20,30,100,20,hWnd,(HMENU)ID_BUTTON,Inst,NULL);
то цвет его фона будет серый. Такими же получаются и кнопки.
Никак не могу найти где это поменять методами API.
(На форуме искал)
CreateWindow("button","",WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX|BS_DEFPUSHBUTTON|WS_BORDER,20,30,100,20,hWnd,(HMENU)ID_BUTTON,Inst,NULL);
то цвет его фона будет серый. Такими же получаются и кнопки.
Никак не могу найти где это поменять методами API.
(На форуме искал)
на самом деле все просто - создаешь свой класс на основе стандартного и указываешь нужную тебе кисть в соотв поле WNDCLASSEX? а именно изменить - по моему через setwindowlong можно - где-то в инете я видел пример - поискай - найдешь
В SAD - все в SAD.
Есть такие сообщения, они шлются родительскому окну 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
Блин, чё-то не получается ни один из способов... Чё-нить другое не посоветуете?
И пусть удача повернется к тебе нужным местом 

Ну тогда тебе надо рисовать кнопку самому, глянь стиль BS_OWNERDRAW
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Плохо пробуешь, если не получается. А ты в паренте это пишешь или в самом контроле?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
В паренте
И пусть удача повернется к тебе нужным местом 

Для стандартых кнопок обрабатывать WM_CTLCOLORBTN смысла мало: все равно будет использован системный цвет,
цитата:
цитата:
Т.е. придется рисовать кнопку самому, используя стиль BS_OWNERDRAW, либо примерно то же самое с помощью subclassing.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.