|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.04.2008, 21:03 | #1 |
Пользователь
Регистрация: 01.04.2008
Сообщений: 58
|
Рисование...
Помогите разобрать логику...
Нарисовал в окне график какой-то функции. Теперь хочу сделать, чтобы при нажатии на кнопку дорисовывался новый график, и не удалялся старый... Как это сделать?? |
21.04.2008, 22:19 | #2 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Можно рисовать не в окно, а в битмап, а потом уже из него в окно. Объясните подробнее, что хотите сделать, будет проще советовать.
|
22.04.2008, 06:33 | #3 |
Пользователь
Регистрация: 01.04.2008
Сообщений: 58
|
Есть материнское окно с менюшками.... и есть дочерние окно, в котором должно производится рисование графиков. При создании дочернего окна в процедуре этого окна я пишу код, который рисует оси координат, подписи... Теперь мне нада добавить график, после того как процедура главного окна обработает данные введеные пользователем.
По идее нада послать сообщение WM_PAINT дочернему окну, и написать код который, нарисует график. Если бы он был один, то я бы просто перерисовал бы все вместе с осями, но плюс еще график. Но у меня графиков может быть 3,4,5... и все совмещены вместе и при етом выводится могут в разном порядке, в зависимости от того, что хочет получить пользователь. |
22.04.2008, 07:55 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
22.04.2008, 14:08 | #5 | |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Цитата:
|
|
22.04.2008, 16:36 | #6 |
Пользователь
Регистрация: 01.04.2008
Сообщений: 58
|
А как сделать так, чтобы контекст устройства не передавать Windows? Мы же вконце пишем EndPaint(hwnd,&ps); .... И по идее контекст возвращается в начальное состояние. Т.е. если снова же обьявить контекст етого же окна HDC hdc=BeginPaint(hwnd,&ps); то оно же будет заново рисовать и придется перерисовывать все с осями.
А есть ли вариант как-то запомнить, что уже построено и достроить к нему новое? |
22.04.2008, 17:36 | #7 | |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Цитата:
Для этого нужно 1. Создать битмап. Скажем, при создании окна. Код:
Код:
Код:
|
|
29.04.2008, 16:24 | #8 |
Пользователь
Регистрация: 01.04.2008
Сообщений: 58
|
SelectObject(hTmpDC, hTmpBmp);
DeleteDC(hTmpDC); EndPaint(hWnd, &ps); Раскажите, пожалуйста, что делает код в конце работы с контекстом совместимой памяти: SelectObject(hTmpDC, hTmpBmp); Возникла проблема, что при дорисовывании нового графика, ему скажем нада побольше размах осей...значит нада дорисовать оси и вырисовать все графики при новых осях. Я для осей и каждого нового графика делаю новый контекст памяти совместимой с устройством. Потом по надобности в этих контекстах изменяю оси, графики как мне нада... В цыкле сообщений все контексты памяти пробую накладывать друг на друга функцией BitBlt(...) таким образом: BitBlt(hdcMem3....hdcMem1...); BitBlt(hdcMem3....hdcMem2...); Вот одна беда, почему-то они не совмещаются а перекрывают друг друга... Перепробовал вроде все возможные значения последнего параметра функции dwRop, которые описаны в msdn. Может как-то по другому стоит мыслить для решения проблемы? |
29.04.2008, 18:03 | #9 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Не понимаю, зачем Вам столько битмапов? Вполне можно рисовать в один, то, что я предлагал в основном "для красоты" и на тот случай если графики строятся достаточно долго, чтобы их рисовать по WM_PAINT. Комбинировать картинки не сложно, только это часто зависит от характера самих изображений, но тот код, что Вы привели, ровным счётом ни о чём не говорит.
|
30.04.2008, 22:07 | #10 |
Пользователь
Регистрация: 01.04.2008
Сообщений: 58
|
Не...Битмамп один. Я создаю несколько контекстов памяти, рисую в них и потом все переношу в етот битмап...я так понимаю, то что делается.
Вобщим вопрос в том, что када копируется из котекста памяти в битмап рисунок, то битмап затирается со всем предидущим, что в нем было. А мне нада чтобы как минимум не затиралось, а налаживалось... Можна канешно делать как вы советуете все последовательно, но тада там очень много перещетов будет делать программа, для того лиш чтобы оси перестроить... А я хочу свести лишние общеты к минимуму. И для етого все ето делаю. И код я привел, чтобы по возможности понятнее было откуда оно взято... Я думал его хватит. Меня интересует что делает в конце строка: SelectObject(hTmpDC, hTmpBmp); ето из вашего же примера выше. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
рисование в TImage | Rusl92 | Общие вопросы Delphi | 8 | 02.05.2008 20:23 |
Рисование на экране... | Roberto | Win Api | 3 | 07.04.2008 07:35 |
Рисование вTImage | Rusl92 | Компоненты Delphi | 27 | 02.04.2008 14:18 |
Рисование в Chart | SunKnight | Общие вопросы Delphi | 3 | 07.02.2008 09:16 |
рисование изолиний | Alar | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 30.10.2006 14:17 |