Автор
|
Тема: CView::OnSize(UINT nType, int cx, int cy)
|
asteroid |
опубликован 17-12-2001 18:27 MSK
Подскажите пожалуйста как можно в этом методе вывести на экран изображения в обход onDraw, я попытался заблокировать вызов onDraw но в любом случае изображения пр сообщении WM_SIZE не появляется CView::OnSize(UINT nType, int cx, int cy) CClientDC dc(this) ; CRect rect DrawBlock=1; CDC* pDC = &dc ; int nDC=pDC->SaveDC(); CBrush brushBlue(RGB(0, 0, 255)); CBrush* pOldBrush = dc.SelectObject(&brushBlue); rect.DeflateRect(cx-100,cy-100); dc.Rectangle(rect); dc.SelectObject(pOldBrush); dc.TextOut(cx-25,cy-25,"paint window"); В таком стиле но OnSize не выводит!
|
Flex Ferrum
|
опубликован 17-12-2001 18:32 MSK
А смысл? Все равно в процессе изменения размера окну посылается WM_PAINT - так и рисуй в нем. |
asteroid
|
опубликован 17-12-2001 18:35 MSK
Flex Ferrum я хочу чтобы выводилось блоккируя OnPaint, те у меня проблема мерцания при рбновлении и я думаю лбнлвлять обходя функцию OnDraw |
Flex Ferrum
|
опубликован 17-12-2001 18:38 MSK
Проблему мерцания ты этим не решишь. Мерцание возникает из-за дефолтной обработки WM_ERASEBKGND - это первое. Второе - не надо перерисовывать всю картинку - рисуй только в той облатси, которую надо обновлять. |
asteroid
|
опубликован 17-12-2001 19:08 MSK
Проблема в том что у меня в клиентской облости как в пайнте виндовском, иожет быть загоужено до 50 картинок например, когда я меняю размеры окна видно как картинки мигают, те перересовка, поэтому то обновлять я могу либо всю клиентскую облость либо, я потеряю часть картинок.(Картинки анимают всю клиентскую область а при OnSize по Default вызывается OnDraw) |
DmitryRyvkin
|
опубликован 18-12-2001 05:58 MSK
Добавляете OnEraseBkg. Оьработчик, что будет поставлен (типа CWnd::OnEraseBkg) удаляете на фиг. return true;Для более красивого рисования рекомендую создать CDC в памяти рисовать на нем, а в OnPaint делать BitBlt |
DmitryRyvkin
|
опубликован 18-12-2001 06:02 MSK
PS в память создать CDC будет не очень просто :) По-крайней мере с непривычки. Ибо надо будет еще создать CBitmap совместимый с экраном, поставить ему нужный размер и выбрать его в контекст это CDC в памяти. Да еще в OnSize придется динамически удалять ентот битмэп и создавать новый. Код у меня есть если надо. |
asteroid
|
опубликован 18-12-2001 11:21 MSK
Дмитрий спасибо за ответ, кстате а у вас этот эмайл работает, я письмо вам послал. |