Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.64
TANAR
0 / 0 / 0
Регистрация: 23.08.2007
Сообщений: 4
#1

Как заставить не затирать окном полученную графику в GDI? - C++

23.08.2007, 21:03. Просмотров 4710. Ответов 5
Метки нет (Все метки)

Первый раз столкнулся с GDI и вот никак не могу допереть как заставить не затирать окном полученную графику...
Графика выводиться потоком по указателю в диалоговое окно. Насколько я понял, тама надо что-то с OnDraw'ом делать, а вот что, да как не пойму...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2007, 21:03     Как заставить не затирать окном полученную графику в GDI?
Посмотрите здесь:

Как заставить объекты масштабироваться вместе с окном? - C++
Итак, дорогие мастера кодинга на с++, совсем ламерский вопрос: Как заставить объекты, например sTabSheet масштабироваться вместе с...

Как проверить полученную дату в промежутке от 20 до 25 дней - C++
Я наконец то нашел функцию для работы со временем но встала проблема как проверить полученную дату в промежутке от 20 до 25?(Дата только...

Как передать матрицу, полученную в одной функции, в другую функцию? - C++
как передать матрицу ,которую мы получили в одной функции в другую функцию? Написала функции для обработки матриц,но компилятор...

ShellExecute - манипулирование окном программы. Как сделать? - C++
Я в своей программе использую ShellExecute - API-шую функцию, которая открывает файл программой, сопоставленной с этим расширением файла....

Как избавиться от мерцания в gdi? - C++
Как избавиться от мерцания в gdi? Пробовал делать двойную буфферизацию с помощью CreateCompatibleBitmap и BitBlt, но не рисовался даже...

Как подключить GDI+ в Code::Blocks? - C++
Здравствуйте. Пытаюсь работать с графикой в Code::Blocks, но, найти GDI+ не удалось: т.е. ни библиотек, ни заголовочных файлов там...

Как использовать графику? - C++
здравствуйте, таких тем уже довольно много, я пытался разобраться, не создавая тему, но ничего не получается... #include <windows.h> ...

Как рисовать графику - C++
Добрый день Хочу спросить каким образом можно нарисовать графический елементы. Мне тут задали курсовую написать что-то на подобии...

Как в консоли под Windows выкинуть исключение диалоговым окном? - C++
Привет! Как можно выкинуть окошко виндусовское с красным крестиком, мол, хана! исключение там то ! в консоле самому? throw же работает в...

Как через GDI нарисовать пиксел на окне? - C++
Как через GDI нарисовать пиксел на окне?

как рисовать графику в С++ или С - C++
Помогите пожалуйста,кто нибудь по пунктам и подробно,начиная с того,какой С или С++ нужно установить,что бы с графикой работать и пошагово...

Как подключить у Dev C++ графику - C++
Как подключить у Dev C++ графику ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TANAR
0 / 0 / 0
Регистрация: 23.08.2007
Сообщений: 4
24.08.2007, 18:46  [ТС]     Как заставить не затирать окном полученную графику в GDI? #2
Ладно попробую перефразировать...
У меня есть интерфейс который пораждает дочернее немодальное диалоговое окно...Есть поток, который сидит и ловит инфу...Ету инфу он выводит по ссылке(в поток я пердал ссылку на основной интерфейс) в дочернем диалоговом окошке...оть..Все замечательно, но при перерисовке естественно все пропадает. Я перекопал уже пол нета и н-ое кол-во книг, но как действительно бороться с етой проблемой так и не допер...Единственное что смог уловить - надо рисовать в растр и потом уже его выводить, но как тоже толком не понял...Есть добрый человек, который поможет разобраться что да как? Заранее спасибо...
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
28.08.2007, 18:16     Как заставить не затирать окном полученную графику в GDI? #3
а что вы собственно рисуете на форме диалога?



Принцип работы оконного интерфейса windows, как впрочем и многих других: все что отрисовано один раз на поверхности диалога, может быть стерто при перерисовке перекрывающим диалогом, поэтому должно быть перерисовано диалогом в момент когда область становиться снова видимой (перекрывающий диалог был закрыт или свернут).



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



От диалога/окна/формы лишь требуется правильная реакция на данное событие: повторная отрисовка содержимого.



Сообщение на уровне Windows API, которое должно вас интересовать называется WM_PAINT, если вы используете MFC или какую другую библиотеку более высокого уровня, то скорее всего вам просто необходимо правильно реализовать обработчик события OnPaint.



Каким образом вы это делаете - решать вам. Можно полностью пересоздать изображение для отрисовки, можно хранить образ уже готового и сформированного один раз изображения в памяти и просто скопировать на DC. Можно скомбинировать оба способа или придумать еще чего-нибудь.



С уважением,

Владимир
TANAR
0 / 0 / 0
Регистрация: 23.08.2007
Сообщений: 4
30.08.2007, 17:02  [ТС]     Как заставить не затирать окном полученную графику в GDI? #4
Спасибо за ответ!
Я в диалоге рисую графики...в реальном времени.
На сколько я понял самым оптимальным в этом случае будет рисовать по битмапу и в OnPaint загружать етот битмап. Вот с битмапом у меня получается не очень хорошо...Если не трудно могли бы вы расказать етот принцип?
С уважением Артем
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
30.08.2007, 20:23     Как заставить не затирать окном полученную графику в GDI? #5
Вот здесь хороший пример in-memory Device Context http://www.codeproject.com/gdi/flickerfree.asp, который как раз использует битмап, кстати, полезный класс для отрисовки изображения формы или элемента без мигания.



К сожелению класс спроектирован для использования лишь с библиотекой MFC, но сам принцип там вполне хорошо просматривается.



Удачи,

Владимир
TANAR
0 / 0 / 0
Регистрация: 23.08.2007
Сообщений: 4
03.09.2007, 17:45  [ТС]     Как заставить не затирать окном полученную графику в GDI? #6
Большое Спасибо!
Yandex
Объявления
03.09.2007, 17:45     Как заставить не затирать окном полученную графику в GDI?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru