Цвет текста - окно статик

Тема в разделе "WASM.BEGINNERS", создана пользователем assorted, 16 июл 2007.

  1. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Подскажите как поменять цвет текста в статике...
    создаю его так

    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] ?
     
  2. MHajduk

    MHajduk New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2006
    Сообщения:
    123
    Я бы написал так:

    Код (Text):
    1. (...)
    2.  
    3.     invoke  CreateSolidBrush, 0x00E9EC    
    4.         mov     [LabelBrush], eax        
    5.  
    6.     (...)
    7.        
    8. .wmctlcolorstatic:
    9.                  
    10.     mov     eax, [wparam]
    11.         mov     [hDC], eax
    12.  
    13.         invoke  SetTextColor, [hDC], 0xFF0000                  
    14.         invoke  SetBkColor, [hDC], 0x00FF00
    15.                        
    16.         mov     eax, [LabelBrush]
    17.  
    18.         jmp     .finish
    19.  
    20. (...)
     
  3. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Проблема у меня намного раньше. Есть родительское окно. Есть дочерние "Статики"
    Мой код - выше - вообще делает доин из статиков не видмым. До цвета даже не доходит.
     
  4. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    а можно это делать в обработчике сообщений родительского окна?
     
  5. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Есть прогресс - все статики изменили цвет(не ясно почему), а тот который мне нужен по прежнему не виден.
    из родительского по 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?
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    WM_CTLCOLORSTATIC посылается статиками родительскому окну, чтобы то вернуло кисть для заливки фона (или настроило DC для отрисовки текста). Чтобы определить, какой именно послал смотри параметры этого сообщения.

    Если же ты сабклассируешь какой-то контрол, то тебе не это сообщение обрабатывать надо, а WM_PAINT, но тогда придётся рисовать всё самому (хотя это не сложно).
     
  7. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Спасибо разобрался. WM_CTLCOLORSTATIC обработал в родительском обработчике.