Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
4 / 4 / 2
Регистрация: 17.10.2013
Сообщений: 131

Раскраска кнопок

24.11.2013, 01:01. Показов 4591. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.Поставил пару кнопок в окно.Хочется их закрасить каким-либо цветом и текст вывести каким либо цветом.
Попробовал-
C++
1
2
3
4
         hdc1=GetDC(hButton1);
     SetBkColor(hdc1,RGB(255,255,255));//цвет  фон                           
     SetTextColor(hdc1,RGB(255,0,0));// цвет текста
     ReleaseDC(hButton1,hdc1);
Что-то никак.
Подскажите,пожалуйста.Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.11.2013, 01:01
Ответы с готовыми решениями:

Имитация нажатия кнопок клавиатуры нажатиями кнопок в окне
Скажите,как заменить нажатие кнопок клавиатуры на нажатие кнопок в окне?

Создать массив кнопок, для каждой кнопок будет одинаковый обработчик
Всем привет! Нужна помощь в реализации такой задачи. Нужно создать массив кнопок, для каждой кнопок будет одинаковый обработчик...

Из созданного массива кнопок одна из кнопок (9) должна выполнять метод Percent
Из созданного массива кнопок одна из кнопок (9) должна выполнять метод Percent, но после запуска выдаёт исключение "Ссылка на объект...

10
 Аватар для BeginerMan
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
24.11.2013, 09:12
Покажи как ты кнопку создавал
0
4 / 4 / 2
Регистрация: 17.10.2013
Сообщений: 131
24.11.2013, 16:47  [ТС]
Добрый день.Кнопку создавал просто-
hButton4=CreateWindow(L"button",L"информ ация об окне", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,780,0, 200, 20, hwnd, (HMENU)10004, hInstance, NULL);
Остальные -тоже так.Это в int WINAPI WinMain (.... Обрабатываю в case WM_COMMAND:
if(LOWORD(wparam)==10004)
{....
Но изменить цвет текста и залить фоном нужного цвета-что-то никак.
Заранее спасибо.
0
 Аватар для FreeMan108
121 / 121 / 32
Регистрация: 04.03.2013
Сообщений: 370
24.11.2013, 18:45
WM_CTLCOLORBTN

C++
1
2
3
case WM_CTLCOLORBTN:
      SetTextColor ((HDC)wParam, RGB (0, 0, 255));
      return hBrush;
0
4 / 4 / 2
Регистрация: 17.10.2013
Сообщений: 131
24.11.2013, 22:32  [ТС]
Спасибо.Сделал так-
C++
1
2
3
4
5
 case WM_CTLCOLORBTN:
                {
                         SetTextColor((HDC) wparam,RGB(0,0,0));
                         return (LRESULT)CreateSolidBrush(RGB(255,255,0));
                }
Работает.
Но 1)закрашиваются все кнопки желтым цветом,а как разные кнопки разным цветом.
2)текст на кнопках не виден.
3)кисть надо уничтожить.А где ?Или она сама уничтожается?
Что делать.Подскажите,пожалуйста.Прочитал все.Но что-то не доходит.
Заранее спасибо.
0
 Аватар для FreeMan108
121 / 121 / 32
Регистрация: 04.03.2013
Сообщений: 370
25.11.2013, 00:59
Цитата Сообщение от aznvsk Посмотреть сообщение
Но 1)закрашиваются все кнопки желтым цветом,а как разные кнопки разным цветом.
Цитата Сообщение от aznvsk Посмотреть сообщение
Прочитал все.
Ну и чему равен lParam?

Цитата Сообщение от aznvsk Посмотреть сообщение
3)кисть надо уничтожить.А где ?Или она сама уничтожается?
Это да. Надо уничтожать. Надо создать кисть в WM_CREATE и удалить в WM_DESTROY.
0
4 / 4 / 2
Регистрация: 17.10.2013
Сообщений: 131
25.11.2013, 03:43  [ТС]
Спасибо.Про создание и удаление понял.Так и сделал.А с lparam-понял,что это hwnd окна(кнопки).Попробовал использовать так,
C++
1
2
3
4
5
6
7
8
9
10
case WM_CREATE:
    br=CreateSolidBrush(RGB(255,0,0));
    break;  
    
 case WM_CTLCOLORBTN:
        SetWindowText((HWND)lparam, L"ColorXY_AZ");
                 SetBkColor((HDC)wparam,RGB(0,0,255));// цвет фон
                 SetTextColor((HDC)wparam,RGB(255,0,0));// цвет текста
                return ((LRESULT)br);
        break;
Что-то ничего не выходит.Что означает параметр знаю,а как и где использовать,что-то никак.Не понимаю.Возвращается кисть,но не цвет текста,не цвет фона,не надпись на кнопке.
Подскажите,пожалуйста.Заранее спасибо.
0
 Аватар для FreeMan108
121 / 121 / 32
Регистрация: 04.03.2013
Сообщений: 370
25.11.2013, 13:59
Давай весь код.
0
4 / 4 / 2
Регистрация: 17.10.2013
Сообщений: 131
25.11.2013, 14:45  [ТС]
Код весь здесь.Последняя версия ,как говорится.
Код рабочий .Мой.
Здесь три нерешенных момента(никак не могу их решить).Обьясняли многие,но не работает и все.
1)По закраске кнопок и надписям на них.С Ваших ответов,я только две кнопки закрасил красным цветом.Подписать не смог.
2)По очистке содержимого окна перед новым кликом.Я сделал по своему.Работает.Но,думаю,можно сделать лучше.Как очищать окно,не пойму.Обьясняли.Сделал,как обьясняли .Не работает ,и еще другие отрицательные моменты появились.Поэтому оставил свой вариант.
3)никак не пойму как вставить анимированную иконку.Простая втавляется.Анимированная никак.Можно таймер поставить и показывать картинки через интервал времени.Но есть ведь нужные функции.Какие не знаю.
Может есть и другие ляпы.

Подскажите,пожалуйста.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
//------------------------------- 
 
#include <stdafx.h>
//#include <stdio.h>
//#include <Windowsx.h>
LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);
int xPos, yPos; 
POINT cPt;
int Horres,Vertres;
WORD nSize;
HWND hwnd;
HBRUSH br;
MSG msg;
WNDCLASS w;                                                         
HDC  hdc;
TCHAR szBuf[80] ;
COLORREF color; 
PAINTSTRUCT ps; 
 
HWND    hButton1;
HWND    hButton2;
HWND    hButton3;
HWND    hButton4; 
HWND    hButton5; 
HWND    hButton6; 
HWND    hButton7; 
 
int size_x,size_y; 
int fl=0;
char cbBuffer[MAX_PATH];
int fl_r;
 
 
int  WINAPI WinMain    (HINSTANCE        hInstance,
                        HINSTANCE         hPrevInstance,
                        LPSTR             lpCmdLine,
                        int               nCmdShow)
 
{
 
 
    
    memset(&w, 0, sizeof(WNDCLASS));
    w.style = CS_HREDRAW | CS_VREDRAW;
    w.lpfnWndProc = WndProc;
    w.hInstance = hInstance;
    w.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH);    
    w.lpszClassName =L"My Class";
    w.hCursor=LoadCursor(NULL,IDC_CROSS); 
    //w.hIcon = LoadIcon (0,IDI_ASTERISK);//IDI_APPLICATION IDI_HAND IDI_QUESTION IDI_EXCLAMATION   
    //w.hIcon = (HICON)LoadImage(NULL, L"C:\\Documents and Settings\\Admin\\My Documents\\Загрузки\\Картинки\\favicon.ico", IMAGE_ICON,16,16,LR_LOADFROMFILE);//работает            
    w.hIcon =LoadIcon(hInstance,MAKEINTRESOURCEW(300));//работает
        
    RegisterClass(&w);
    
    
      hdc=GetDC(NULL);
      Horres  =    GetDeviceCaps(hdc, HORZRES);
      Vertres =    GetDeviceCaps(hdc, VERTRES);
    
    
 
    
    hwnd = CreateWindow(L"My Class",L"Окно",WS_OVERLAPPEDWINDOW, 0, 0,Horres ,Vertres , NULL, NULL, hInstance, NULL);          
    hButton1=CreateWindow(L"button",L"показывать только последний результат",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|WS_DLGFRAME,0 , 0,300 , 20, hwnd, (HMENU)10001, hInstance, NULL);
    hButton2=CreateWindow(L"button",L"показывать все результаты",WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON|WS_DLGFRAME,300 , 0,230 , 20, hwnd, (HMENU)10002, hInstance, NULL);
    hButton3=CreateWindow(L"button",L"информация о программе Color_AZ", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,530,0,250, 20, hwnd, (HMENU)10003, hInstance, NULL);      
    hButton4=CreateWindow(L"button",L"информация об окне", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,780,0,205, 20, hwnd, (HMENU)10004, hInstance, NULL);       
    hButton5=CreateWindow(L"button",L"", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW,0,19,Horres, 4, hwnd, (HMENU)10005, hInstance, NULL);       
    hButton6=CreateWindow(L"button",L"", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW,985,0,Horres-985, 20, hwnd, (HMENU)10006, hInstance, NULL);     
          
        
    SendMessage(hButton2,BM_SETCHECK ,1 , 0);   //установка значкаBST_CHECKED
    fl_r=2;                        
    
    
    SetWindowText(hwnd, L"ColorXY_AZ-программа определения кода цвета и координат точек на экране дисплея.");    
    
    
    ShowWindow(hwnd,nCmdShow);
    
    while(GetMessage(&msg,NULL,0,0))
        {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        }
    return msg.wParam;
}
 
 
LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
       
    switch (Message)
    {
 
        case WM_DESTROY:         
        PostQuitMessage(0);
        ReleaseDC(NULL,hdc);
        DeleteObject(br);
        break;
    
    
        case WM_SIZE:
            //Запоминаем текущие размеры окна.
            size_x = LOWORD(lparam); 
            size_y = HIWORD(lparam);
         break;
    
    case WM_LBUTTONUP:
                                                              
      if(fl_r==1)
     {
         ShowWindow(hwnd,SW_MINIMIZE);
         ShowWindow(hwnd,SW_MAXIMIZE);
      
      }
   
      GetCursorPos(&cPt);
      xPos   = cPt.x;
      yPos   = cPt.y;
      color  =    GetPixel(hdc,xPos,yPos);
      
      if(GetRValue(color)==0)
      {nSize=wsprintf(szBuf, TEXT("координаты:X:%d,Y:%d,цвет:#%X%X%X%X"), xPos,yPos,GetRValue(color),GetRValue(color),GetGValue(color),GetBValue(color) );}
      
      if(GetGValue(color)==0)
      {nSize=wsprintf(szBuf, TEXT("координаты:X:%d,Y:%d,цвет:#%X%X%X%X"), xPos,yPos,GetRValue(color),GetGValue(color),GetGValue(color),GetBValue(color) );}
      
      if(GetBValue(color)==0)
      {nSize=wsprintf(szBuf, TEXT("координаты:X:%d,Y:%d,цвет:#%X%X%X%X"), xPos,yPos,GetRValue(color),GetGValue(color),GetBValue(color),GetBValue(color) );}
      
      if(GetRValue(color)==0 && GetGValue(color)==0)
      {nSize=wsprintf(szBuf, TEXT("координаты:X:%d,Y:%d,цвет:#%X%X%X%X%X"), xPos,yPos,GetRValue(color),GetRValue(color),GetGValue(color),GetGValue(color),GetBValue(color) );}
      
      if(GetRValue(color)==0 && GetBValue(color)==0)
      {nSize=wsprintf(szBuf, TEXT("координаты:X:%d,Y:%d,цвет:#%X%X%X%X%X"), xPos,yPos,GetRValue(color),GetRValue(color),GetGValue(color),GetBValue(color),GetBValue(color) );}
      
      if(GetGValue(color)==0 && GetBValue(color)==0)
      {nSize=wsprintf(szBuf, TEXT("координаты:X:%d,Y:%d,цвет:#%X%X%X%X%X"), xPos,yPos,GetRValue(color),GetGValue(color),GetGValue(color),GetBValue(color),GetBValue(color) );}
      
      if(GetRValue(color)==0 &&GetGValue(color)==0 && GetBValue(color)==0)
      {nSize=wsprintf(szBuf, TEXT("координаты:X:%d,Y:%d,цвет:#%X%X%X%X%X%X"), xPos,yPos,GetRValue(color),GetRValue(color),GetGValue(color),GetGValue(color),GetBValue(color),GetBValue(color) );}
      
      if(GetRValue(color)!=0 &&GetGValue(color)!=0 && GetBValue(color)!=0)
      {nSize=wsprintf(szBuf, TEXT("координаты:X:%d,Y:%d,цвет:#%X%X%X"), xPos,yPos,GetRValue(color),GetGValue(color),GetBValue(color) );}
      
      SetBkColor(hdc,RGB(255,255,255));//цвет фона                          
      SetTextColor(hdc,RGB(255,0,0));  //цвет текста
    //if(fl!=0) {
    // Создаем красную кисть.
      
       if(xPos<Horres-270){TextOut(hdc,xPos ,yPos, szBuf, nSize);}  
       if(xPos>=Horres-270){SetTextColor(hdc,RGB(0,0,255));TextOut(hdc,xPos-260 ,yPos+5, szBuf, nSize);}
                
      br = CreateSolidBrush(RGB(255, 0, 0));
    // Приписываем кисть к контексту устройства.
      SelectObject(hdc, br);
      Ellipse(hdc, xPos-5, yPos-5, xPos+5, yPos+5);
    // Уничтожаем кисть.
      DeleteObject(br);                 
    //}
      fl=fl+1;                             
    break;      
      
    case WM_COMMAND:
        if(LOWORD(wparam)==10003)
        {      
     MessageBox(hwnd,
     TEXT("ColorXY_AZ-программа определения цвета и координат точек на экране дисплея."),TEXT("О программе ColorXY_AZ"), 0);
        }   
       if(LOWORD(wparam)==10004)
       {      
    
wsprintf((LPWSTR)cbBuffer, TEXT("%s - %d*%d\n%s - %d*%d"), L"Разрешение дисплея           ", Horres,Vertres,L"Размер окна                         ",size_x,size_y);
MessageBox(hwnd,(LPWSTR)cbBuffer,TEXT("Информация об окне            "), MB_OK);    
            
      
       
       }    
        
        if(LOWORD(wparam)==10002) {fl_r=2;}
             
        if(LOWORD(wparam)==10001) {fl_r=1;}
        
 case WM_CREATE:
    br=CreateSolidBrush(RGB(255,0,0));
    break;  
    
 case WM_CTLCOLORBTN:                                                                                                                                   
                return ((LRESULT)br);
        break;       
                
 
 
       default:
       return DefWindowProc(hwnd, Message, wparam, lparam);
    }
    return 0;
}
Добавлено через 29 минут
Вот еще одна проблема с кодом.Я в окно информацию вывожу,но скопировать в буфер не могу.Чтобы код цвета вставить куда либо.Как здесь быть.Заранее спасибо.
0
 Аватар для FreeMan108
121 / 121 / 32
Регистрация: 04.03.2013
Сообщений: 370
25.11.2013, 17:02
В MSND все написано, есть такой волшебный стиль BS_OWNERDRAW и сообщение WM_DRAWITEM, даже отдельная статейка про создание цветных кнопок имеется.
0
4 / 4 / 2
Регистрация: 17.10.2013
Сообщений: 131
25.11.2013, 19:50  [ТС]
Спасибо.Буду читать.Стиль BS_OWNERDRAW-есть у меня в коде.Сообщение-WM_DRAWITEM пока не анализирую.
Но если можно ,в двух словах,дайте пожалуйста ,Ваше решение этих трех-четырех проблем по моему коду.Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.11.2013, 19:50
Помогаю со студенческими работами здесь

Ремонт кнопок тайч-пада и клавиатуры (замена кнопок)
Доброго времени суток. У меня появился нетбук ASUS EeePC 900 HA с несколькими проблемами: на клавиатуре отсутствует кнопка INS на...

Имитация нажатия кнопок клавиатуры нажатиями кнопок в окне
Скажите,как заменить нажатие кнопок клавиатуры на нажатие кнопок в окне?

Как определить индексы соседних кнопок в массиве кнопок?
Массив кнопок 10*10,при нажатии на кнопку она меняет цвет,и соседние с ней тоже.Сама кнопка меняет цвет,а как определить индексы соседних? ...

Нужно получить окно из 11 кнопок: 9 кнопок одинакового размера (100х100 пикселей) (GridLayout(3,3)); и 2 кнопки снизу этих 9
Здравствуйте! Нужно получить окно из 11 кнопок: 9 кнопок одинакового размера (100х100 пикселей) (GridLayout(3,3)); и 2 кнопки снизу этих 9:...

Раскраска
Добрый день! Здесь описан замечательный урок: тема «Делаем детские разукрашки» Не могли бы вы мне пожалуйста написать, что нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru