На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> проблема с ClearType , ???
    VC++ 7.0, WinAPI

    решил в статусбаре окна отображать состояние wordwrap ричедита буквами WW соответственно серго или черного цвета (неактивный-активный).
    написал вот такую функцию, вызываемую из WM_PAINT statusbar
    ExpandedWrap disabled
      void classStatusbar::UpdateWordwrapField(BOOL state)
      //
      {
       
          // это нужно для очистки этого поля
          if (state == -1) {
              ::SendMessage(_hWnd, SB_SETTEXT, (WPARAM)6,(LPARAM)_T(""));
              return;
          }
          RECT rc = {0};
          HFONT hfont = (HFONT)::SendMessage(_hWnd, WM_GETFONT, 0, 0 );
       
          HDC hdc = GetDC(_hWnd);
          ::SendMessage(_hWnd, SB_GETRECT, (WPARAM)6, (LPARAM) &rc);
          rc.left += 2;
          
          ::SetBkMode(hdc, TRANSPARENT);
          ::SelectObject(hdc, (HGDIOBJ)hfont);
          if (state==0) {
              ::SetTextColor(hdc, ::GetSysColor(COLOR_GRAYTEXT));
          }
          ::DrawText(hdc, _T("WW"), -1, &rc, DT_VCENTER | DT_SINGLELINE | DT_VCENTER);
       
          //::SendMessage(_hWnd, SB_SETTEXT, (WPARAM)6,(LPARAM)(LPTSTR)_T("WW") );
       
          ::ReleaseDC(_hWnd, hdc);
       
      }

    всё вроде ОК, но вот если на машине включен ClearType - то WW выводится жирно-черным (видимо сглаженным), отличаясь от остального текста статусбара.
    Как бы это побороть?
    Или дайте другой пример как мне делать серый-черный текст в статусе,

    прикладываю скриншот проблемы:
    Прикреплённая картинка
    Прикреплённая картинка
      Не уверен, что из-за этого, но тут возможна утечка GDI ресурсов. Надо запоминать фонт из DC (который вернула SelectObject) и потом его восстанавливать перед ReleaseDC. Вообще, строго говоря, все измененные установки DC надо возвращать в исходное состояние после всех рисований.
        Uncle_Bob
        делал так (запоминал всё, восстанавливал) - не влияет :(

        Добавлено
        а утечка откуда? я же ничего не создаю, только имеющимися хэндлами пользуюсь.
        Хотя ты, конечно, прав, сделаю снова более корректно.
          Цитата vito333 @
          а утечка откуда? я же ничего не создаю, только имеющимися хэндлами пользуюсь.

          Я не утверждаю, я говорил "возможна". Может утекать предыдущий объект HFONT, который теряется когда ты делаешь SelectObject.

          На самом деле нет идей почему он рисуется болдом.
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0411 ]   [ 15 queries used ]   [ Generated: 4.04.26, 03:46 GMT ]