Сейчас на форуме: jinoweb (+5 невидимых)

 eXeL@B —› Программирование —› Как обновить цвет STATIC'а
Посл.ответ Сообщение

Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 20 декабря 2015 14:29 · Поправил: Andrello_88
· Личное сообщение · #1

Делаю так:

Code:
  1. .const
  2. label1ID         equ 1
  3.  
  4.  
  5. .elseif uMsg==WM_INITDIALOG 
  6. szText statClas,'STATIC'
  7. invoke CreateWindowEx,WS_EX_LEFT,
  8.           ADDR statClas,ADDR Infos,
  9.           WS_CHILD or WS_VISIBLE or SS_LEFT,
  10.           20,20,100,20,hWnd1,label1ID,
  11.           hInstance,NULL
  12. mov hndle, eax
  13. invoke SendMessage,hndle,WM_SETFONT,hFont, 0
  14. mov eax, hndle
  15.  
  16.  
  17. .elseif uMsg == WM_CTLCOLORSTATIC
  18. invoke GetDlgCtrlID,lParam1                 
  19. .if eax == label1ID
  20. .if flag == 0
  21. RGB 255,255,255
  22. invoke SetTextColor,wParam1,0FFA07Ah
  23. invoke SetBkMode,wParam1,TRANSPARENT
  24. invoke GetStockObject,NULL_BRUSH
  25. ret
  26. .else
  27. RGB 255,255,255
  28. invoke SetTextColor,wParam1,0000000h
  29. invoke SetBkMode,wParam1,TRANSPARENT
  30. invoke GetStockObject,NULL_BRUSH
  31. ret       
  32. .endif
  33. .endif


Все работает, но цвет текста меняется только при перезапуске дочернего окна! Как менять его не закрывая окно?



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 20 декабря 2015 14:48 · Поправил: dosprog
· Личное сообщение · #2

Это тебе надо на какой-нибудь хороший форум по программированию.
А тут ты только засоряешь ленту новостей, сорри.





Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 20 декабря 2015 15:41 · Поправил: VodoleY
· Личное сообщение · #3

Andrello_88 а откуда твое окно.. знает что ты ему цвет поменял? намекаю на Update(Repaint) и тебе правильно подметили.. тут как бы не кодят. Возьми любую книжку по программированию. почитай про контролы.. в гугле масса готового кода

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 20 декабря 2015 15:58 · Поправил: DenCoder
· Личное сообщение · #4

Из старого
Code:
  1. {
  2.          WINDOWINFO wi;
  3.          HBRUSH hbr;
  4.          HWND hWndCur;
  5.          Subroutines* pSub;
  6.          WND_PARS* pWndPars;
  7.          bool bSecondWnd;
  8.          bool bLeaf;
  9.          bool bRecursive;
  10.          RECT rect;
  11.  
  12.          hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  13.  
  14.          if(bAnalysisComplete)
  15.          {
  16.                  hWndCur = pWnd->m_hWnd;
  17.  
  18.                  wi.cbSize = sizeof(WINDOWINFO);
  19.                  ::GetWindowInfo(hWndCur, &wi);
  20.  
  21.                  if(wi.atomWindowType == atom)
  22.                  {
  23.                         pSub = (Subroutines*)::GetWindowLong(hWndCur, GWL_USERDATA);
  24.  
  25.                         if(!pSub)return hbr;
  26.  
  27.                         bSecondWnd = false;
  28.                         bLeaf = pSub->GetFirstCall() == NULL;
  29.                         bRecursive = pSub->IsRecursive();
  30.  
  31.                         pWndPars = pSub->FindWnd(pSub->GetHWND());
  32.                         while(pWndPars)
  33.                         {
  34.                               COLORREF cr = RGB(0, 0, 0);
  35.                               COLORREF br = RGB(0xFF, 0xFF, 0xFF);
  36.                               
  37.                               if(bSecondWnd)
  38.                                    cr = RGB(0, 0xFF, 0);
  39.                               else
  40.                                    bSecondWnd = true;
  41.  
  42.                               if(pWndPars->hWnd == hWndCur)
  43.                               {
  44.                                    if(bLeaf)
  45.                                        cr = RGB(0, 0, 0xFF);
  46.  
  47.                                    if(bRecursive)
  48.                                        cr = RGB(0xFF, 0, 0);
  49.  
  50.                                    //Можно и так
  51.                                    ::SetTextColor(pDC->m_hDC, cr);
  52.                                    ::SetBkColor(pDC->m_hDC, br);
  53.                                    //pDC->SetTextColor(cr);
  54.                                    break;
  55.                               }
  56.                               pWndPars = pWndPars->pNext;
  57.                         }
  58.                  }
  59.          }
  60.  
  61.          return hbr;
  62. }


Грамотно переведите на выбраный вами асм, замените WM_CTLCOLOR у меня на WM_CTLCOLORSTATIC и буит Вам щасье

Как очень возможная причина, почему у Вас не работает - нет возврата HBRUSH.
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.
--> Link <--

-----
IZ.RU


| Сообщение посчитали полезным: Rainbow, Andrello_88


Ранг: 52.0 (постоянный), 146thx
Активность: 0.030.08
Статус: Участник

Создано: 21 декабря 2015 07:26 · Поправил: UniSoft
· Личное сообщение · #5

Andrello_88 пишет:
Как менять его не закрывая окно?

перерисовывать/обновлять окно нужно...
что-нибудь типа:
Code:
  1. .elseif uMsg==WM_LBUTTONDOWN
  2.     inc    flag
  3.     and   flag, 1
  4.     invoke InvalidateRect,hndle,NULL,FALSE
  5. .endif


| Сообщение посчитали полезным: Andrello_88

Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 22 декабря 2015 17:47
· Личное сообщение · #6

Всем спасибо, разобрался!


 eXeL@B —› Программирование —› Как обновить цвет STATIC'а
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати