Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > графика в диалоговом окне


Автор: Дима 28.11.2002, 22:58
Сделал все по книге а оно мерцает.
Подскажите пожалуйста как избежать!

void MyDialog::OnPaint()
{
CWnd* pWnd = GetDlgItem(IDC_STATIC1);
CDC* pControlDC = pWnd->GetDC();

pWnd->Invalidate();
pWnd->UpdateWindow();
pControlDC->SelectStockObject(BLACK_BRUSH);
pControlDC->Rectangle(0,0,10,10);
pWnd->ReleaseDC(pControlDC);
}

Автор: AntonSaburov 29.11.2002, 00:59
Можно попытаться ускорить вывод графики. Если в двух слова, то вывести рисунок в память а потом уже отображать.

Автор: Observer 29.11.2002, 02:50
По-моему не хватает device-context objects в начале

Автор: Baa 29.11.2002, 07:59
http://www.forum.vingrad.ru/cgi-bin/newforum/ikonboard.cgi?act=ST;f=1;t=2914

Автор: Blade 29.11.2002, 09:36
Код

void MyDialog::OnPaint()
{
CWnd* pWnd = GetDlgItem(IDC_STATIC1);
CDC* pControlDC = pWnd->GetDC();

А что это за чушь?????
Код
pWnd->Invalidate(); - ?
pWnd->UpdateWindow(); - ?
pControlDC->SelectStockObject(BLACK_BRUSH);
pControlDC->Rectangle(0,0,10,10);
pWnd->ReleaseDC(pControlDC);
}


Или это я такой тупой?
Убери эти идиотские строчки, всё будет OK :)

Автор: Дима 29.11.2002, 20:27
Blade!

Пример взят из книги Д.Д Круглински глава 6.

Твой код работает спасибо за помощь.

Автор: Blade 30.11.2002, 05:53
Да не за что  :)

Автор: Baa 30.11.2002, 07:05
Цитата(Blade @ 29.11.2002, 01:36)
Или это я такой тупой?
Убери эти идиотские строчки, всё будет OK :)

2 Blade:
Это он рисует на IDC_STATIC1
В частности:
//получаем указатель на IDC_STATIC1
CWnd* pWnd = GetDlgItem(IDC_STATIC1);
//А тут указатель на контекст этого окна
CDC* pControlDC = pWnd->GetDC();
//выставляем, чтобы при следующем WM_PAINT сие окно отрисовалось.
pWnd->Invalidate();
//Посылаем ему WM_PAINT
pWnd->UpdateWindow();
//Выбираем черную кисть
pControlDC->SelectStockObject(BLACK_BRUSH);
//и рисуем черный квадрат... прям Малевич
pControlDC->Rectangle(0,0,10,10);
//освобождаем контекст
pWnd->ReleaseDC(pControlDC);


Вот ток pWnd->Invalidate можно убрать...
з.ы. а у меня не мерцает %)

Автор: Blade 30.11.2002, 10:01
Цитата(Baa @ 29.11.2002, 23:05)
Вот ток pWnd->Invalidate можно убрать...
з.ы. а у меня не мерцает %)

Я про то и говорил. У нас ведь WM_PAINT отсылается каждый раз при перетаскиватие, перекрытие и т.д. окна, и Invalidate запускает OnPaint(), вот и получается что вся эта фигня просто циклится, т.е. окно обновляется не тольок при перетаскивание, но и во всё остальное время :)
P.S. А странная, какая-то книжка была... :)

Автор: Дима 1.12.2002, 03:45
Blade!
Круглинский весьма известен по моему

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)