На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU
  
> WM_CTLCOLOREDIT и фон едита? , WTF???
    Не могу установить свой цвет фона едита, сообщение WM_CTLCOLOREDIT приходит, возвращаю хендл на кисть, но почему-то цвет остаётся стандартным?
      У меня работает...

      ExpandedWrap disabled
        HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
        {
            HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
            
         
            if (nCtlColor == CTLCOLOR_EDIT)
            {
                hbr = CreateSolidBrush (RGB (0, 255, 0));
            }
         
            return hbr;
        }

      Обрабатываю сообщение WM_CTLCOLOR

      Кстати, про WM_CTLCOLOREDIT волшебнику ничего не известно.
        Дело в том, что я пишу без использования МФЦ, а это сообщение, на сколько я понял есть только в нём, так что же мне "ловить" в чистом АПИ?
        ExpandedWrap disabled
          case WM_CTLCOLOREDIT:
              if((HWND)lParam == hEdit)
              {
                  SetTextColor((HDC)wParam, RGB(255, 0, 0));
                  SetBkColor((HDC)wParam, RGB(0, 255, 0));
                  return (LRESULT)CreateSolidBrush(RGB(0, 0, 255));
              }
              break;

        Вот что интересно, после этого кода меняется цвет текста, цвет бэкграунда для текста, а фон едита остаётся стандартным! Что я забыл?
          Цитата MSDN
          If a dialog box procedure handles this message, the dialog box procedure should cast the desired return value to a BOOL and return the value directly


          Может тогда надо сделать так:
          ExpandedWrap disabled
            case WM_CTLCOLOREDIT:
                if((HWND)lParam == hEdit)
                {
                    SetTextColor((HDC)wParam, RGB(255, 0, 0));
                    SetBkColor((HDC)wParam, RGB(0, 255, 0));
                    return (BOOL)CreateSolidBrush(RGB(0, 0, 255)); // !!!!
                }
                break;
            Не, это не поможет. Блин, чё за ...? Какие-нибудь другие предложения есть?
              Все тема закрыта!
              ЗЫ. и MSDN порой гонит! ;)
                так в чем же собака порылась? :)
                  Цитата Fester, 3.12.04, 21:25, 532005
                  так в чем же собака порылась?

                  MSDN, как ..., прочитай и сделай наоборот ;)
                  Написанно:
                  Цитата MSDN

                  WM_CTLCOLOREDIT
                  ...
                  If a dialog box procedure handles this message, it should cast the desired return value to a BOOL and return the value directly. If the dialog box procedure returns FALSE, then default message handling is performed. The DWL_MSGRESULT value set by the SetWindowLong function is ignored.

                  Сделеал через SetWindowLong(..., DWL_MSGRESULT, кисть) - всё заработало!
                  ЗЫ. может к eVS 3.0 мсдн наспех клепали, вот и ошибочка вышла? А то очепяток я там кучу видел...
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0239 ]   [ 16 queries used ]   [ Generated: 27.04.24, 04:56 GMT ]