Хочу поменять цвет шрифта у Static контрола, используя такой код: Код (Text): .ELSEIF uMsg == WM_CTLCOLORSTATIC invoke GetDlgCtrlID,lParam .IF EAX == staticID RGB 55,155,255 invoke SetTextColor,wParam,eax invoke GetStockObject,NULL_BRUSH .ENDIF Но он отказывается работать. Почему?
нда ребята :\ Код (Text): proc _dlgproc, hWnd,wMsg,wParam,lParam push ebx esi edi cmp [wMsg],WM_COLORSTATIC jz .wmcolorstatic <...> .wmcolorstatic: invoke GetDlgCtrlID,[lParam] or eax,eax jz .processed cmp ID_STATIC,eax jnz .processed invoke SetBkMode,[wParam],TRANSPARENT invoke SetTextColor,[wParam],0x0FF00FF invoke GetStockObject,NULL_BRUSH jmp .finish <...> .processed: xor eax,eax inc eax .finish: pop edi esi ebx ret ; новая версия fasm'а
Avoidik Почему не WM_CTLCOLORSTATIC? Эта константа правильно определена? ID_STATIC точно совпадает? Остальное всё верно.
Avoidik Если устанавливаешь SetBkMode, то надо бы позаботиться, чтобы предыдущий текст стереть, а то новый текст выводится поверх другого
Quantum, на скорую руку писал, первое, там CTL и второе - лучше cmp eax,ID_STATIC (это идентификатор ресурса) cresta, попробуй OPAQUE поставить
Avoidik если диалог с фоном (напр. на табе в ХР) надо DefWindowProc, потом изменить цвет и вернуть кисть с DefWindowProc.. это правильно!!! и гарантированно работает!!!
santOS Какой ещё фон? Что вы человека путаете? Avoidik Так мы на кофейной гуще гадаем... Плохо Аттачте весь код.
q_q, спасибо за хороший пример, но я в С++ неочень разбираюсь. Вот выкладываю аттач, может вам будет лучше понять, что я там написал. P.S. вопрос несовсем по теме: Почему удалили мою тему под названием "Соединение двух строк" (Дата: Июн 17, 2005 23:24:48). Quantum вчера еще дал мне совет по той теме, потом я задал еще один вопрос, ... через пару часов зашел просмотреть, а ее уже небыло. Скажите хоть, по каким причинам ее удалили, или это технические неполадки? 1645334280__TextColor.rar
Её не удалили. Вот она. Модераторы перенесли тему в соответствующий раздел форума. Ваша прога не работает вот почему: Код (Text): invoke GetStockObject,NULL_BRUSH Тут в eax возвращается хэндл прозрачной кисти. Код (Text): .ENDIF xor eax,eax А тут вы сами перезаписываете значение в eax. Прямо после GetStockObject вставьте ret.
If an application processes this message, the return value is a handle to a brush that the system uses to paint the background of the static control То, что вернулось в eax из GetStockObject, винде ещё нужно, поэтому его терять нельзя, нужно его передать в том же eax.
О великий джа !!!! Посыпаю голову пеплом !!! наконец-то программа заработала)) Большое всем спасибо за помощь!