Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 20.11.2016, 12:32   #11
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 467
Репутация: 101
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А что мешает получать DC при обработке таймера?
Тогда придется каждый раз вызывать
Код:


      if Assigned(fFont) then
      SelectObject(fDC, fFont.Handle);
      SetBkMode(fDC,TRANSPARENT);
      SetTextColor(fDC, fColorFont);
      SetBkColor(fDC,fColorBackground);

и т.п.
А если делать это при движении мыши, то вообще слишком часто получится.
BLACK_RAIN вне форума   Ответить с цитированием
Старый 20.11.2016, 14:16   #12
Hailov
Пользователь
 
Регистрация: 08.10.2016
Сообщений: 18
Репутация: 40
По умолчанию

Есть же WM_PAINT.
В нем классически получаем hDC через BeginPaint.
Можно eще WM_ERASEBKGND обработать. Да масса вариантов... Или есть нюанс именно со статиком?

Цитата:
WS_CLIPCHILDREN / WS_CLIPSIBLINGS - это не работает, если у статика есть стиль SS_BITMAP
А временно отключить стиль SetWindowLong ?

Последний раз редактировалось Hailov; 20.11.2016 в 14:21.
Hailov вне форума   Ответить с цитированием
Старый 20.11.2016, 14:23   #13
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 467
Репутация: 101
По умолчанию

Цитата:
Сообщение от Hailov Посмотреть сообщение
Есть же WM_PAINT.
В нем классически получаем hDC через BeginPaint.
Можно eще WM_ERASEBKGND обработать. Да масса вариантов... Или есть нюанс именно со статиком?
мне нужно рисовать по таймеру или (иногда) при движении мышью.
BLACK_RAIN вне форума   Ответить с цитированием
Старый 20.11.2016, 14:28   #14
Hailov
Пользователь
 
Регистрация: 08.10.2016
Сообщений: 18
Репутация: 40
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
мне нужно рисовать по таймеру или (иногда) при движении мышью.
Отлично. В таймере вызвать InvalidateRect, и пойдет прорисовка WM_PAINT
Hailov вне форума   Ответить с цитированием
Старый 20.11.2016, 14:54   #15
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 467
Репутация: 101
По умолчанию

Цитата:
Сообщение от Hailov Посмотреть сообщение
InvalidateRect
Из ее описания ничего не понял. Она просто вызывает событие WM_PAINT, но функции рисования будут действовать только в пределах Rect?
BLACK_RAIN вне форума   Ответить с цитированием
Старый 20.11.2016, 15:13   #16
Hailov
Пользователь
 
Регистрация: 08.10.2016
Сообщений: 18
Репутация: 40
По умолчанию

Вобщем да. Точнее она добавляет новый регион прорисовки (После WM_PAINT все регионы обнуляются). Можно указать вторым параметром NULL и прорисуется вся клиентская зона.
Так намного удобнее: все рисование в классичекой WM_PAINT.
У вас еще была проблема с повторными установками атрибутов контекста. Ее можно решить созданием окна с со стилем CS_OWNDC.

Последний раз редактировалось Hailov; 20.11.2016 в 15:20.
Hailov вне форума   Ответить с цитированием
Старый 20.11.2016, 15:29   #17
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,047
Репутация: 1520
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
мне нужно рисовать по таймеру или (иногда) при движении мышью.
Таймер нужен только если на экране "движущиеся картинки"... События мыши тоже не особо частые.

А, впрочем, дело хозяйское, храните DC да и меняйте, когда resize будет...
Вы, похоже, всегда целиком все окно рисуете...
waleri вне форума   Ответить с цитированием
Старый 20.11.2016, 17:48   #18
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 467
Репутация: 101
По умолчанию

Цитата:
Сообщение от Hailov Посмотреть сообщение
CS_OWNDC
Это значит, что уникальный DC получат либо все дочерние окна, либо ни одно?

Цитата:
Сообщение от waleri Посмотреть сообщение
Вы, похоже, всегда целиком все окно рисуете...
Вы имеете ввиду разбить отрисовку на несколько стадий и вызывать каждую в нужный момент?
BLACK_RAIN вне форума   Ответить с цитированием
Старый 20.11.2016, 18:13   #19
Hailov
Пользователь
 
Регистрация: 08.10.2016
Сообщений: 18
Репутация: 40
По умолчанию

Цитата:
Это значит, что уникальный DC получат либо все дочерние окна, либо ни одно?
Нет. Классически, вы должны зарегистрировать свой класс окна с этим стилем и тогда все экземпляры окон данного класса будут иметь свой неизменяемый контекст.
Еще, как вариант, при сложной логике рисования, где критична скорость выполнения и где можно пренебречь излишнем использованием памяти, можно всю отрисовку выполнять на битмэпе в памяти, а в нужный момент: InvalidateRect вызывает WM_PAINT и в нем BitBlt куска битмэпа на контекст окна.

PS/ Вы вроде как дельфи юзаете. Не исключено, что формы порождаемые им уже имеют стиль CS_OWNDC. Гляньте SPY+

Последний раз редактировалось Hailov; 20.11.2016 в 18:21.
Hailov вне форума   Ответить с цитированием
Старый 20.11.2016, 18:19   #20
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 467
Репутация: 101
По умолчанию

ладно, разберусь
BLACK_RAIN вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пропали контролы с формы Дамир Общие вопросы .NET 6 12.01.2017 00:16
пользовательские контролы ts-alan ASP.NET 3 30.03.2015 17:18
Контролы для Silverlight (4,5) LeniumSoft WPF, UWP, WinRT, XAML 1 07.07.2012 20:32
Контролы SilverLight Elkenos WPF, UWP, WinRT, XAML 1 12.02.2011 11:23
Контролы на baloonhint Toxa Компоненты Delphi 0 06.11.2007 18:33




05:54.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru