Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
#MRoose
 Аватар для MIRAMIX
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416

Как поменять цвет у кнопки и при увеличении окна сохранить все элементы на старых позициях?

21.10.2014, 00:11. Показов 1039. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В интернете очень много прочитал но везде только функции дают а я то новичок и пока рано с функцичми работать.Поэтому прошу вот проект и нужно 5 кнопокам поменятт цвет.Вы пожалуйста хотя бы к одной вставьте нужный код и все.
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
201
202
203
#include <Windows.h>
#include <tchar.h>
 
 
#define ID_BUTTON1 101
#define ID_BUTTON2 102
#define ID_BUTTON3 103
#define ID_BUTTON4 104
#define ID_BUTTON5 105
#define CM_ABOUT 1060
 
HINSTANCE hinst;
TCHAR szclassname[] = TEXT("BB");
 
HACCEL CreateAccelTable(void);
BOOL regclass(WNDPROC, LPCTSTR, UINT);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
    MSG msg;
    HWND hwnd;
    hinst = hInst;
 
    if (!regclass(WndProc, szclassname, COLOR_WINDOW)) return FALSE;
 
    hwnd = CreateWindow(szclassname, TEXT("����������� ��� �� ��� - DirectX"),
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        0, 0, hinst, NULL);
 
    if (!hwnd) return FALSE;
 
    HACCEL hAccel = CreateAccelTable();
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!hAccel || !TranslateAccelerator(hwnd, hAccel, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    DestroyAcceleratorTable(hAccel);
    return msg.wParam;
}
 
BOOL regclass(WNDPROC proc, LPCTSTR sname, UINT bback)
{
    WNDCLASS wc;
    wc.style = wc.cbClsExtra = wc.cbWndExtra = 0;
    wc.hbrBackground = CreateSolidBrush(RGB(255,255,255));   ///(HBRUSH)(bback + 1)
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.lpfnWndProc = proc;
    wc.hInstance = hinst;
    wc.lpszMenuName = NULL;
    wc.lpszClassName = sname;
    return RegisterClass(&wc) != 0;
}
 
BOOL CreateMenuItem(HMENU hMenu, TCHAR *str, UINT uIns, UINT uCom, HMENU hSubMenu, BOOL flag, UINT fType)
{
    MENUITEMINFO mii;
    mii.cbSize = sizeof(MENUITEMINFO);
    mii.fMask = MIIM_STATE | MIIM_TYPE | MIIM_SUBMENU | MIIM_ID;
    mii.fType = fType;
    mii.fState = MFS_ENABLED;
    mii.dwTypeData = str;
    mii.cch = sizeof(str);
    mii.wID = uCom;
    mii.hSubMenu = hSubMenu;
    return InsertMenuItem(hMenu, uIns, flag, &mii);
}
 
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
    static HWND hButton1,hButton2,hButton3,hButton4,hButton5;
    static HMENU hMainMenu, hEditMenu;
    switch (msg)
    {
    case WM_CREATE:
    {
 
        CreateWindow(TEXT("button"), TEXT("������� ���� ����"),
            WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
            275, 360, 650, 120,                                    // 600-������ �����,300-������ ������,215-����� GroupBoxa,120-��� ������
            hwnd, (HMENU)0, hinst, NULL);
 
 
 
        hButton1 = CreateWindow(TEXT("button"), NULL, ///black
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            350, 400, 100, 50,
            hwnd,
            (HMENU)ID_BUTTON1,
            hinst,
            NULL);
        hButton2 = CreateWindow(TEXT("button"), NULL,  //red
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            450, 400, 100, 50,
            hwnd,
            (HMENU)ID_BUTTON2,
            hinst,
            NULL);
        hButton3 = CreateWindow(TEXT("button"), NULL, //yellow
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            550, 400, 100, 50,
            hwnd,
            (HMENU)ID_BUTTON3,
            hinst,
            NULL);
        hButton4 = CreateWindow(TEXT("button"), NULL, //green
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            650, 400, 100, 50,
            hwnd,
            (HMENU)ID_BUTTON4,
            hinst,
            NULL);
        hButton5 = CreateWindow(TEXT("button"), NULL, //blue
            WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            750, 400, 100, 50,
            hwnd,
            (HMENU)ID_BUTTON5,
            hinst,
            NULL);
 
        hMainMenu = CreateMenu();
        hEditMenu = CreatePopupMenu();
        int i = 0;
        CreateMenuItem(hEditMenu, TEXT("� ���������"), i++, CM_ABOUT, NULL, FALSE, MFT_STRING);
        i = 0;
        CreateMenuItem(hMainMenu, TEXT("�������"), i++, 0, hEditMenu, FALSE, MFT_STRING);
        SetMenu(hwnd, hMainMenu);
        DrawMenuBar(hwnd);
        return 0;
    }
 
    case WM_COMMAND:
    {
        switch (LOWORD(wp))
        {
          case CM_ABOUT:
          { 
            MessageBox(hwnd, TEXT("����))) ���� ������.������ ����� � �������������� DirectX"), TEXT("� ���������"), MB_OK); return 0;
 
          }
          case ID_BUTTON1:
          {
              MessageBox(hwnd, TEXT("������ ����� �����"), TEXT("��������� �� ������"), MB_OK);
          }
        }
        return 0;
    }
 
        ////////////////////////////////////////////
        ////case WM_CTLCOLORBTN:{
        ////SetTextColor((HDC)wp, RGB(34, 99, 244));
        ////return (LRESULT)CreateSolidBrush(RGB(233, 0, 0));}
        ////////////////////////////////////////////
    case WM_DESTROY:{PostQuitMessage(0); return 0; }
    }
    return DefWindowProc(hwnd, msg, wp, lp);
}
 
 
HACCEL CreateAccelTable(void)
{
    //������ ������������� 
    ACCEL Accel[6];
    
    Accel[0].fVirt = FVIRTKEY;
    Accel[0].key = VK_ESCAPE;
    Accel[0].cmd = CM_ABOUT;
 
    Accel[1].fVirt = FVIRTKEY;
    Accel[1].key = 0x5a;
    Accel[1].cmd = ID_BUTTON1;
 
    Accel[2].fVirt = FVIRTKEY;
    Accel[2].key = 0x58;
    Accel[2].cmd = ID_BUTTON2;
 
    Accel[3].fVirt = FVIRTKEY;
    Accel[3].key = 0x43;
    Accel[3].cmd = ID_BUTTON3;
 
    Accel[4].fVirt = FVIRTKEY;
    Accel[4].key = 0x56;
    Accel[4].cmd = ID_BUTTON4;
 
    Accel[5].fVirt = FVIRTKEY;
    Accel[5].key = 0x42;
    Accel[5].cmd = ID_BUTTON5;
 
 
    //Accel[0].fVirt = FVIRTKEY;
    //Accel[0].key = VK_RETURN;
    //Accel[0].cmd = �����/���� ����;
 
    return CreateAcceleratorTable((LPACCEL)Accel, 6);
}
где иероглифы то там комментарии и русские буквы

И как привязать кнопки к окну? То есть вот запумкается ехе а когда увеличиваешь окно то все элементы съежают влево вверх.как я понял привязка к левой и верхней сторонам.Кау сделать чтобы все элементы оставались на той же позиции что и при старте?тоже пожалуйста код вставьте))

Заранее огромное спасибо)))
Вложения
Тип файла: rar DirectX Test.rar (6.88 Мб, 4 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2014, 00:11
Ответы с готовыми решениями:

Как поменять цвет кнопки при ее нажатии, а при наведении чтоб цвет не менялся?
//css файл .mymegabutton{ background: blue; } .hvr{ background: green; } .act{ background: green !important; }

Как поменять цвет фона кнопки и цвет текста на кнопке?
имеется код: //Кнопка &quot;Выход&quot; CreateWindow(TEXT(&quot;button&quot;), TEXT(&quot;Выход&quot;), WS_CHILD|WS_VISIBLE|BS_OWNERDRAW, 170, 180, 120, 30, hWnd,...

Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна"
Что происходит при нажатии этой кнопки в плане сообщениий, и как их перехватить и игнорировать,что бы окно не сворачивалось? Чем это...

6
Заблокирован
23.10.2014, 11:09
Ой щи.... Почему все начинают писать свои первые программы с гавнокода? Ну очевидно же, что в VisualStudio есть в меню кнопка - File->New->Projects...Win32 Project, создав стандартный проект win32 сразу станет ясно, как должно там всё создаваться и отображаться... Чё воротить какую - то кучу ерунды?
В общем даже копаться не хочу, подскажу только что для изменения фона окна используется обработка сообщения WM_CTLCOLORSTATIC, например так:
C++
1
2
3
4
5
6
7
8
case WM_CTLCOLORSTATIC:
{
    HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 255));
    HDC hdcStatic = (HDC)wp;
    SetTextColor(hdcStatic, RGB(0, 255, 0));
    SetBkMode(hdcStatic, TRANSPARENT);
    return (LONG)hbrush;
}
Можешь вставить в свой проект это, скажем перед обработкой WM_DESTROY, в конце, и у тебя изменится фон одного окна с надписью, для кнопок ты создаёшь окна, зачем? ))))))) Что за бредовый код, какова цель?
Если ты так делаешь, то делай уже оконную процедуру для каждой кнопки))
0
#MRoose
 Аватар для MIRAMIX
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
23.10.2014, 11:40  [ТС]
-THE_MASTER666-, цвет окна меняется еще в wc.hbrBackground.и фон пока не нужен.Чем Вас не устраивает?пустой плюсовой проект и пустой cpp и все.где говнокод?все вроде бы конкретно.я уже насоздавался приложения вот и решил с директом поработать.
0
Заблокирован
23.10.2014, 11:56
Цитата Сообщение от MIRAMIX Посмотреть сообщение
я уже насоздавался приложения вот и решил с директом поработать.
Для работы с DirectX нужно простое окно, которое должно обрабатывать сообщения создания, закрытия, ресайзинга, обработка мышки и клавиатуры (да и то, для клавиатуры игроделы обычно используют GetAsyncKeyState() ), всё, больше ничего, а ну ещё сообщения гоу то фоновое состояние, гоу то обратно
Вот, посмотри пример простого треугольника на DirectX с русскими комментами.
Вложения
Тип файла: rar dx11tutorial02src.rar (572.2 Кб, 5 просмотров)
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
23.10.2014, 12:03
Цитата Сообщение от MIRAMIX Посмотреть сообщение
И как привязать кнопки к окну? То есть вот запумкается ехе а когда увеличиваешь окно то все элементы съежают влево вверх.как я понял привязка к левой и верхней сторонам.Кау сделать чтобы все элементы оставались на той же позиции что и при старте?
Это программист должен позаботится как и где все будет находится и перерисовываться. Нужно перерисовывать кнопки (SetWindowPos()) при сообщении WM_SIZE с нужными координатами относительно окна. Координаты окна можно узнать с помощью GetClientRect().
0
 Аватар для behollder
47 / 28 / 12
Регистрация: 23.01.2013
Сообщений: 125
23.10.2014, 12:04
-THE_MASTER666-,
Замечу что, ресурс кисти не освобождается, а значит утечка будет.
0
Заблокирован
23.10.2014, 12:13
Цитата Сообщение от greenlight Посмотреть сообщение
Замечу что, ресурс кисти не освобождается, а значит утечка будет.
да это я скопипасти откуда - то, просто посмотрев на всю печаль кода, приведённого ТС-ом, было лень вдумываться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2014, 12:13
Помогаю со студенческими работами здесь

Напечатайте в строку все трехзначные числа, которые при увеличении на 1 кратные 2, при увеличении на 2 кратные 3
2.Напечатайте в строку все трехзначные числа, которые при увеличении на 1 кратные 2, при увеличении на 2 кратные 3, при увеличении на 3...

Как поменять цвет кнопки
подскажите пионеру, как поменять цвет кнопки АВТОРИЗАЦИЯ на сайте chamber.kr.ua Хочу обратить внимание, что если меняю в css - то цвет...

Как поменять цвет кнопки?
&lt;button onClick &lt;span style= &quot; font: verdana; position: absolute; left: 10px; top: 100px; width:100px;height:100px;&quot;&gt;...

Как сохранить состояние кнопки (цвет) после закрытия программы?
на форме накидано несколько кнопок, при нажатии на кнопку она выделяется цветом, как сделать так, чтобы при следующем запуске программы...

Найти все трехзначные числа, которые при увеличении на 1 делятся на 2, при увеличении на 2 делятся на 3
2.Найти все трехзначные числа, которые при увеличении на 1 делятся на 2, при увеличении на 2 делятся на 3, при увеличении на 3 делятся на...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru