Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод на виртуальный контекст 
:(
    Опции темы
ej0804
Дата 16.2.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 30.3.2007

Репутация: нет
Всего: нет



     Подскажите пожалуйста как вывести стандартные элементы (кнопки. и т.д.) на виртуальный контекст. чтобы потом все вместе (с рисунками) плюхнуть на настоящий?  Проблема такая - я на диалоговое окно вывожу много растров. чтобы при выводе они не мерцали  вывожу их все в виртуальный контекст а затем одним махом на настоящий. Но дело в том что теперь стали мерцать стандартные элементы которые повидимому отрисовываются сразу на настоящий контекст. Как тут поступить?   Заранее спасибо.

Это сообщение отредактировал(а) ej0804 - 16.2.2009, 16:13
PM MAIL   Вверх
Earnest
Дата 16.2.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



А зачем растры выводить непосредственно на диалог? Это фоновая картинка? Тогда попробуй малой кровью обойтись: поставь диалогу стиль WS_CLIPCHILDREN. 
Если растры у тебе занимают весь диалог, то нужно еще избавиться от стирания фона: переопредели обработчик WM_ERASEBACKGND и просто верни там true.
Рисовать (в смысле на настоящий контекст выводить) нужно в OnPaint, а в виртуальный - когда угодно.
А если растры выводятся в ограниченную область диалога, лучше сделать там свой контрол.

А вообще, чтобы вывести окно в заданный контекст, используй сообщение WM_PRINT. Где-то в форуме WinAPI это обсуждалось.



--------------------
...
PM   Вверх
ej0804
Дата 16.2.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 30.3.2007

Репутация: нет
Всего: нет



Цитата(Earnest @ 16.2.2009,  16:55)
А зачем растры выводить непосредственно на диалог? Это фоновая картинка? Тогда попробуй малой кровью обойтись: поставь диалогу стиль WS_CLIPCHILDREN. 
Если растры у тебе занимают весь диалог, то нужно еще избавиться от стирания фона: переопредели обработчик WM_ERASEBACKGND и просто верни там true.
Рисовать (в смысле на настоящий контекст выводить) нужно в OnPaint, а в виртуальный - когда угодно.
А если растры выводятся в ограниченную область диалога, лучше сделать там свой контрол.

А вообще, чтобы вывести окно в заданный контекст, используй сообщение WM_PRINT. Где-то в форуме WinAPI это обсуждалось.

     Диалог как главное окно программы. Визуализация  технологического процесса. В зависимости от вх\вых на промышленном контроллере меняю рисунки в окне. Вывожу виртуальный экран на настоящий в OnPaint и там же закрашиваю фон. Все нормально выводится пока не помещаю на диалог какой-нибудь элемент типа статика или кнопки ,после чего кнопка(или статик) начинают мерцать. Хотелось бы все это как то выводить одновременно, и виртуальный контекст ,в котором уже что-то нарисовал, и кнопку отрисовать.   
PM MAIL   Вверх
Earnest
Дата 16.2.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Если картинки занимают прямоугольную область, которая не перекрывается другими контролами (кнопками), то лучше сделать отдельный контрол (на основе статика). Это проще всего.



--------------------
...
PM   Вверх
ej0804
Дата 16.2.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 30.3.2007

Репутация: нет
Всего: нет



Цитата(Earnest @ 16.2.2009,  17:31)
Если картинки занимают прямоугольную область, которая не перекрывается другими контролами (кнопками), то лучше сделать отдельный контрол (на основе статика). Это проще всего.

Извиняюсь за глупый вопрос, контрол (на основе статика) это как. Тоже типа картинки в прямоугольной области и отлавливать нажатие в OnMouseMove?
PM MAIL   Вверх
Earnest
Дата 16.2.2009, 18:48 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Зачем тебе нажатие отлавливать для вывода картинки?
Делаешь свой контрол, на основе статика, пишешь ему метод OnPaint (все тоже самое, что в диалоге, только координаты поправь: 
Код

class CMyPicture: public CStatic
{
   DECLARE_MESSAGE_MAP();
   afx_msg void OnPaint();
}

Потом в ресурсе диалоговом ставишь статик типа рамка куда надо и делаешь его нужного размера.
Меняешь ему ид-р на какой-нибудь свой IDC_MYPICTURE (он по умолчанию будет IDC_STATIC).
Можешь его вдавленным сделать, если хочешь (для красоты). Потом в коде DoDataExchange пишешь
DDX_Control (pDX, IDC_MYPICTURE, m_swPicture), где m_swPicture - это член диалога типа CMyPicture.

Ну, еще, видимо, тебе понадобиться метод этой пикчи, что-то вроде AddImage - диалог будет ему картинки добавлять по мере надобности. В общем, весь код работы с картинками выносишь в отдельный класс, вот и все.
А если надо отлавливать нажатия и маус-мовы, то все то же самое, только делат нужно не на основе CStatic, а на основе CButton (или сразу CWnd).


--------------------
...
PM   Вверх
ej0804
Дата 17.2.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 30.3.2007

Репутация: нет
Всего: нет



Проблема может будет в том что я все картинки масштабирую с помощью StretchBlt, чтобы отвязаться от размеров монитора и у меня на всех разрешениях все влазит на один экран, а будет ли так со своим контроллом?
PM MAIL   Вверх
Earnest
Дата 17.2.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



А почему нет? Код остается тем же самым, только ты делаешь в координатах контрола, а не в кординатах диалога, вот и вся разница.


--------------------
...
PM   Вверх
ej0804
Дата 17.2.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 30.3.2007

Репутация: нет
Всего: нет



Спасибо вроде получается. А как программно определить размеры загруженного битмапа? И почему когда я вывожу несколько своих контролов(статиков с рис.) выводится только первый? И как быть если картинки занимают прямоугольную область, которая перекрывается другими контролами?

Это сообщение отредактировал(а) ej0804 - 17.2.2009, 20:34
PM MAIL   Вверх
Earnest
Дата 18.2.2009, 10:47 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



А MSDN почитать? Если битмап - это CBitmap или HBITMAP, то можно спросить его параметры функцией GetBitmap.
Цитата(ej0804 @  17.2.2009,  16:55 Найти цитируемый пост)
И почему когда я вывожу несколько своих контролов(статиков с рис.) выводится только первый?

это у тебя спросить надо, как ты их выводишь.

Цитата(ej0804 @  17.2.2009,  16:55 Найти цитируемый пост)
И как быть если картинки занимают прямоугольную область, которая перекрывается другими контролами?

Нужно Z-order правильно выставить, чтобы эти контролы были сверху. И попробуй поставить контролу с картинкой стиль CLIPSIBLINGS.



--------------------
...
PM   Вверх
ej0804
Дата 18.2.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 30.3.2007

Репутация: нет
Всего: нет



Спасибо разобрался.

С размерами битмапа что-то я действительно затупил.

Это сообщение отредактировал(а) ej0804 - 18.2.2009, 15:35
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0684 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.