Подскажите как поменять цвет текста в статике... создаю его так invoke CreateWindowEx,0,StaticClassName,StaticTextN,WS_CHILD or WS_VISIBLE,\ 30,120,140,16,[hWnd],IDC_STATIC,[hInstance],0 push eax invoke SetWindowLong,eax,GWL_WNDPROC,EditProc pop edx invoke SetWindowLong,eax,GWL_USERDATA,EditProc а вот поц. обработки сообщений. proc EditProc hWnd,uMsg,wparam,lparam push ebx esi edi mov eax,[uMsg] cmp eax,WM_CTLCOLORSTATIC je .wmctlcolorstatic .wmctlcolorstatic: .finish: invoke GetWindowLong, [hWnd], GWL_USERDATA invoke CallWindowProc, eax, [hWnd], [uMsg], [wparam], [lparam] pop edi esi ebx ret endp 1. после того как назначаю свою поц. обработки сообщений у меня текст вообще изчезает. 2. нужно ли в родителе на WM_CTLCOLORSTATIC вызывать SendMessage,[lParam],[uMsg],[wParam],[lParam] ?
Я бы написал так: Код (Text): (...) invoke CreateSolidBrush, 0x00E9EC mov [LabelBrush], eax (...) .wmctlcolorstatic: mov eax, [wparam] mov [hDC], eax invoke SetTextColor, [hDC], 0xFF0000 invoke SetBkColor, [hDC], 0x00FF00 mov eax, [LabelBrush] jmp .finish (...)
Проблема у меня намного раньше. Есть родительское окно. Есть дочерние "Статики" Мой код - выше - вообще делает доин из статиков не видмым. До цвета даже не доходит.
Есть прогресс - все статики изменили цвет(не ясно почему), а тот который мне нужен по прежнему не виден. из родительского по wm_ctlcolorstatic вызываю SendMessage,[hEditProc],[uMsg],[wparam],[lparam] где hEditProc - hWnd нужного статика. а вот код обработчика .wmctlcolorstatic: invoke SetTextColor, [wparam], Blue ;change this to change the color of the link invoke GetSysColor, COLOR_MENU ;background is = to the system menu invoke GetStockObject, HOLLOW_BRUSH ;Return painting with a hollow brush Почему меняют цвет все статики? может я не верно использую WindowLong?
WM_CTLCOLORSTATIC посылается статиками родительскому окну, чтобы то вернуло кисть для заливки фона (или настроило DC для отрисовки текста). Чтобы определить, какой именно послал смотри параметры этого сообщения. Если же ты сабклассируешь какой-то контрол, то тебе не это сообщение обрабатывать надо, а WM_PAINT, но тогда придётся рисовать всё самому (хотя это не сложно).