Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
3 / 3 / 1
Регистрация: 10.08.2017
Сообщений: 32

Сменить цвет в окнах Static

25.04.2020, 14:01. Показов 1110. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день !!!!!
У меня возникла проблема,
есть несколько окон Static, созданные функцией CreateWindowEx.
Необходимо закрасить каждое окно своим цветом.
Идентификатор каждого окна нахожу функцией EnumChildWindows и функцией обратного вызова
GetWindowLong, hwndChild, GWL_ID

Но после сообщения WM_CTLCOLORSTATIC окрашивается только последнее окно Static,
осталные не меняются.
Подскажите как и что надо сделать ?????
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2020, 14:01
Ответы с готовыми решениями:

Цвет отдельного Static в массиве Static'ов
Здравствуйте ! Столкнулся с такой проблемой. Есть у меня массив статиков HWND a; Мне нужно случайным образом поменять цвет двух...

Не получается сменить шрифт в окнах
Не получается поменять шрифт в окнах-формах. Ставлю Lucida Console везде, где только можно. Шрифт подписей, заголовков и прочего меняется,...

Как вывести текст вертикально по центру в окнах STATIC и EDIT
создаю окно STATIC и EDIT: case WM_CREATE: hFont = GetStockObject (DEFAULT_GUI_FONT); hStcTitle = CreateWindowEx (0,...

5
3 / 3 / 1
Регистрация: 10.08.2017
Сообщений: 32
26.04.2020, 08:07  [ТС]
Похоже никто не знает как это делается ????
Будем искать.
0
Заблокирован
27.04.2020, 04:08
Цитата Сообщение от cain52 Посмотреть сообщение
Будем искать.
Да незачем, просто на "асме" не рационально творить то, что не предназначено для него.
Нужно использовать / комбинировать, хотя-бы на С++, вот пример которые при изучении окажет помощь:
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
//
// OnCtlColor
//
INT_PTR OnCtlColor(HDC hDC, HWND hWnd)
{
    if(IDC_CHECK1==GetDlgCtrlID(hWnd))
    {
        if(g_clrMessage==Red)
            SetTextColor(hDC, Green);
        else
            SetTextColor(hDC, g_clrMessage);
        SetBkColor(hDC, g_clrPalette);
    }
    if(IDC_EDIT1==GetDlgCtrlID(hWnd))
    {
        SetTextColor(hDC, g_clrMessage);
        SetBkColor(hDC, g_clrPalette);
    }
    HBRUSH Brush=CreateSolidBrush(g_clrPalette);
    return (INT_PTR)(Brush);
}
 
//
// DlgProc
//
BOOL CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        case WM_INITDIALOG:
            if(-1==OnInitDialog(hWnd))
                SendMessage(hWnd, WM_CLOSE, (WPARAM)0, (LPARAM)0);
            return TRUE;
    
        case WM_COMMAND:
            return OnCommand(hWnd, wParam, lParam);
 
        case WM_CTLCOLORDLG:
        case WM_CTLCOLOREDIT:
        case WM_CTLCOLORBTN:
        case WM_CTLCOLORSTATIC:
            return OnCtlColor((HDC)(wParam), (HWND)(lParam));
 
    }//End uMsg
    return FALSE;
}
0
3 / 3 / 1
Регистрация: 10.08.2017
Сообщений: 32
27.04.2020, 08:05  [ТС]
Цитата Сообщение от Guigngn Посмотреть сообщение
Да незачем, просто на "асме" не рационально творить то, что не предназначено для него.
Почему же не предназначено ???
И на асме можно делать все то же что и на С, С++ и даже больше.
Просто немного геморно, но можно. Даже те кто пишет на С, С++, используют асм в своих проектах и не так уж и редко.

Спасибо за пример, буду разбираться. О результате отпишу.

Добавлено через 4 минуты
У меня есть проект на чистом асме и Win API, обслуживание бесконтактных карт
стандарты Mifare, работает нормально и по объему не большой, работает с базой MySQL/
И все сделано на MASMе.
1
Заблокирован
01.05.2020, 04:10
cain52, мужичек, не упрямься, сказали - не с м о ж е ш ь эффективно работать...

Я, никогда не лгу!
Не видишь, я мастер - требуются доказательства? - имеются:

Assembler
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
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
%TITLE "Start.asm"
 
; Минимальное приложение Win32
 
    IDEAL
 
    P386
    LOCALS  @@
    MODEL   flat, STDCALL
 
    MASM    ; Вставка объявлений Windows (требуется режим MASM)
 
PathInc macro x
include C:\tools\tasm\include\x
endm
 
PathInc iConst.inc
PathInc Win32.inc
 
    IDEAL
 
include "Winapp.ri"     ; -------- Вставка идентификаторов ресурсов
 
WINDOW_WIDTH        = 640           ; Ширина окна
WINDOW_HEIGHT       = 400           ; Высота окна
MIN_WINDOW_WIDTH    = WINDOW_WIDTH-10   ; Минимальная ширина окна
MIN_WINDOW_HEIGHT   = WINDOW_HEIGHT-10  ; Минимальная высота окна
 
 
    DATASEG     ; -------- Инициализированные переменные
 
include "iData.inc"     ; -------- Определение переменных
 
_g_szWndname    db 'wnd_winapp', 0
_g_szAppname    db 'Winapp Simple win32', 0
szQuest         db 'Do you want to close the program?', 0
 
szWelcome   db 'You smell really bad. Shave, lose weight, and get a real job.', 0
 
szErr1      db 'Cannot register class', 0
szErr2      db 'Cannot create window', 0
 
 
    UDATASEG    ; -------- Неинициализированные переменные
 
Hinstance       dd ?
_g_hWnd     dd ?
 
 
    CODESEG 
 
include "iProc.inc"     ; -------- Определение внешних функций, импортируемых из Windows
 
;
; Entry point
;
Start:
    push    0
    call    GetModuleHandleA
    mov [Hinstance], eax
 
    push    0
    push    offset _g_szWndname
    call    FindWindowA
    or  eax, eax
    jnz Exit
 
    call    WinMain
    jmp Exit
 
ERROR_REGISTER:
    push    ICON_WARNING
    push    offset _g_szAppname
    push    offset szErr1
    jmp MSGBOX
 
ERROR_CREATE:
    push    ICON_WARNING
    push    offset _g_szAppname
    push    offset szErr2
 
MSGBOX:
    push    0
    call    MessageBoxA
Exit:
    push    0
    call    ExitProcess
; -------------------------------------------------------
;
; WinMain
;
proc    WinMain
 
    call    AppInit
    call    AppRun
    ret
 
endp    WinMain
 
;
; AppInit
;
proc    AppInit
 
    call    RegisterWin
 
    push    0           ; Pointer to window-creation data
    push    [Hinstance]     ; Handle to application instance
    push    0           ; Handle to menu, or child-window identifier
    push    0           ; Handle to parent or owner window
    push    CW_USEDEFAULT       ; Window height
    push    CW_USEDEFAULT       ; Window width
    push    CW_USEDEFAULT       ; Y vertical position of window
    push    CW_USEDEFAULT       ; X horizontal position of window
 
    ; Window style
    ;push   WS_SYSMENU or WS_CAPTION or WS_MINIMIZEBOX
    push    WS_OVERLAPPEDWINDOW
 
    push    offset _g_szAppname ; Pointer to registered window name
    push    offset _g_szWndname ; Pointer to registered class name
 
    push    WS_EX_APPWINDOW ; Extended window style
    ;push   WS_EX_WINDOWEDGE
 
    call    CreateWindowExA
    cmp eax, 0
    je  ERROR_CREATE
    mov [_g_hWnd], eax
 
    push    SW_SHOWNORMAL
    push    [_g_hWnd]
    call    ShowWindow
 
    push    [_g_hWnd]
    call    UpdateWindow
    ret
endp    AppInit
 
;
; AppRun
;
proc    AppRun
 
    LOCAL   @@msg:MSGSTRUCT
@@10:
    push    0
    push    0
    push    0
    lea eax, [@@msg]
    push    eax
    call    GetMessageA
    or  ax, ax
    je  @@99
    lea eax, [@@msg]
    push    eax
    call    TranslateMessage
    lea eax, [@@msg]
    push    eax
    call    DispatchMessageA
    jmp @@10
@@99:
    ret
endp    AppRun
 
;
; RegisterWin
;
proc    RegisterWin
 
    LOCAL   @@wcex:WNDCLASSEXA
 
    mov [@@wcex.cbSize], WNDCLASSEXA_LEN        ; sizeof WNDCLASSEXA
    mov [@@wcex.style], CS_HREDRAW or CS_VREDRAW
    mov [@@wcex.lpfnWndProc], offset WndProc
    mov [@@wcex.cbClsExtra], 0
    mov [@@wcex.cbWndExtra], 0
    mov eax, [Hinstance]
    mov [@@wcex.hInstance], eax
    push    IDI_APPICON
    push    0
    call    LoadIconA
    mov [@@wcex.hIcon], eax
    mov [@@wcex.hIconSm], eax
    push    IDC_ARROW
    push    0
    call    LoadCursorA
    mov [@@wcex.hCursor], eax
    mov [@@wcex.hbrBackground], COLOR_WINDOW
    mov [@@wcex.lpszMenuName], IDR_MAINFRAME
    mov [@@wcex.lpszClassName], offset _g_szWndname
    lea eax, [@@wcex]
    push    eax
    call    RegisterClassExA
    cmp eax, 0
    je  ERROR_REGISTER
    ret
endp    RegisterWin
 
;
; WndProc
;
proc    WndProc
 
    USES    ebx, edi, esi
 
    ARG hWnd:dword, uMsg:dword, wParam:dword, lParam:dword
    LOCAL   @@pDC:dword, @@ps:PAINTSTRUCT, @@rect:RECT
 
    mov edi, [hWnd]
    mov esi, [uMsg]
 
    cmp esi, WM_CREATE
    je  @@WMCREATE
 
    cmp esi, WM_PAINT
    je  @@WMPAINT
 
    cmp esi, WM_COMMAND     ; Command
    je  @@WMCOMMAND
 
    cmp esi, WM_GETMINMAXINFO       ; Disable size window
    je  @@WMGETMINMAXINFO
 
    cmp esi, WM_CLOSE
    je  @@WMCLOSE
 
    cmp esi, WM_DESTROY
    je  @@WMDESTROY
 
    jmp @@DEFWINDOWPROC
 
@@WMCREATE:
    jmp @@RETURNZERO
 
@@WMPAINT:
    lea eax, [@@ps]
    push    eax
    push    edi         ; hWnd
    call    BeginPaint
    mov [@@pDC], eax
    push    TRANSPARENT
    push    eax
    call    SetBkMode
;   jmp SKIP
 
    push    offset szWelcome        ; Length of string
    call    lstrlenA
    push    eax
    push    offset szWelcome        ; String
    push    100         ; y
    push    100         ; x
    push    [@@pDC]     ; the DC
    call    TextOutA
    jmp SKIP2
SKIP:
    push    DT_EXTERNALLEADING or DT_NOPREFIX or DT_WORDBREAK
    mov [@@rect.rcLeft], 10
    mov [@@rect.rcTop], 10
    mov [@@rect.rcRight], 600
    mov [@@rect.rcBottom], 100
    lea eax, [@@rect]
    push    eax
    push    -1
    push    offset szWelcome        ; String
    push    [@@pDC]
    call    DrawTextA
SKIP2:
    lea eax, [@@ps]
    push    eax
    push    edi         ; hWnd
    call    EndPaint
    jmp @@RETURNZERO
 
@@WMCOMMAND:
    push    [lParam]
    push    [wParam]
    push    edi         ; hWnd
    call    OnCommand
    jmp @@RETURNZERO
 
@@WMGETMINMAXINFO:
    mov ebx, [lParam]       ; Minmaxinfo structure
    mov [(MINMAXINFO ebx).mintrackposition_x], MIN_WINDOW_WIDTH
    mov [(MINMAXINFO ebx).mintrackposition_y], MIN_WINDOW_HEIGHT
    jmp @@RETURNZERO
 
@@WMCLOSE:
    push    MB_YESNO or MB_ICONQUESTION
    push    offset _g_szAppname
    push    offset szQuest
    push    edi         ; hWnd
    call    MessageBoxA
    cmp eax, IDYES
    jne @@RETURNZERO
    push    edi         ; hWnd
    call    DestroyWindow
    jmp @@RETURNZERO
 
@@WMDESTROY:
    push    0
    call    PostQuitMessage
    jmp @@RETURNZERO
 
@@DEFWINDOWPROC:
    push    [lParam]
    push    [wParam]
    push    esi         ; uMsg
    push    edi         ; hWnd
    call    DefWindowProcA
    jmp @@99
 
@@RETURNZERO:
    mov eax, 0
@@99:
    ret
endp    WndProc
 
;
; DlgProc
;
proc    DlgProc
 
    USES    edi, esi
    ARG hWnd:dword, uMsg:dword, wParam:dword, lParam:dword
 
    mov edi, [hWnd]
    mov esi, [uMsg]
    cmp esi, WM_INITDIALOG
    je  @@WMINITDIALOG
 
    cmp esi, WM_COMMAND
    je  @@WMCOMMAND
    jmp @@RETURNFALSE
 
@@WMINITDIALOG:
    jmp @@RETURNTRUE
 
@@WMCOMMAND:
    mov esi, [wParam]
    cmp esi, IDOK
    je  @@IDOK
    jmp @@RETURNFALSE
 
@@IDOK:
    push    0
    push    edi     ; hWnd
    call    EndDialog
    jmp @@RETURNTRUE
    
@@RETURNTRUE:
    mov eax, 1
    jmp @@99
 
@@RETURNFALSE:
    mov eax, 0
@@99:
    ret
endp    DlgProc
 
;
; HelpAbout
;
proc    HelpAbout
 
    ARG hWnd:dword
 
    push    0
    push    offset DlgProc
    push    [hWnd]
    push    IDD_ABOUTBOX
    push    [Hinstance]
    call    DialogBoxParamA
    ret
endp    HelpAbout
 
;
; OnCommand
;
proc    OnCommand
 
    USES    edi, esi
    ARG hWnd:dword, wId:dword, lParam:dword
 
    mov edi, [hWnd]
    mov esi, [wId]
 
    cmp esi, IDM_EXIT
    je  @@IDMEXIT
    cmp esi, IDM_ABOUT
    je  @@IDMABOUT
    jmp @@99
 
@@IDMEXIT:
    push    0
    push    0
    push    WM_DESTROY
    push    edi
    call    SendMessageA
    jmp @@99
 
@@IDMABOUT:
    push    edi
    call    HelpAbout
    jmp @@99
@@99:
    ret
endp    OnCommand
 
    END Start
 
; -------------------------------------------------------
; <<eof>> Start.asm
; -------------------------------------------------------
Есть круче, смотри на неизвестном читере, программа Topaz от индексоф
0
3 / 3 / 1
Регистрация: 10.08.2017
Сообщений: 32
01.05.2020, 07:15  [ТС]
То,
Спасибо за пример !!!
Если говоришь, что есть круче, то скинь ссылку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.05.2020, 07:15
Помогаю со студенческими работами здесь

Цвет активной ссылки в контенте и во всплывающих окнах
Привет всем. ЗАметил такую проблему - один и тот же цвет активной ссылки(#06E078) отображается по разному. Во всплывающих окнах цвет...

Как с помощью реестра поменять цвет фона в окнах?
Подскажите, как с помощью реестра поменять цвет фона в окнах windows 8.1? В стандартных настройках персонализации нет такой...

Поменялся цвет описаний во всех окнах Visual Studio на белый на белом фоне
Во общем сабж, и теперь ничего не видно, в винде все нормально отображается... Вот так вот выглядит окно &quot;Create Data...

Цвет static на диалоговой панели
Ошибок нет. И цвета тоже нет. После ввода DDX в Dlg.cpp static исчезает. #if...

Изменить цвет элемента STATIC
как на WinApi изменить цвет элемента STATIC. Уже 2 часа мучаюсь, в Интернете все перерыл, а никак разобраться не получается. Вот что я...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru