Re: Проблема с обработкой сообщения WM_PAINT
От: Кондраций Россия  
Дата: 26.03.09 06:00
Оценка:
Здравствуйте, KingT, Вы писали:

KT>создал простое MDI приложение в котором есть окно для рисования графики.Для окна написал простой обработчик сообщения WM_PAINT.


KT>Код C#


KT>protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)

KT> {
KT> int boarder = 10;
KT> int Height = e.ClipRectangle.Height;
KT> int Width = e.ClipRectangle.Width;

KT> System.Console.Beep(4000,10);

KT> System.Drawing.Graphics gr = e.Graphics;
KT> Color color = Color.Red;
KT> Pen pen = new Pen(color);

KT> Rectangle rect = new Rectangle(boarder,boarder,Width-20,Height-20);

KT> gr.DrawRectangle(pen,rect);
KT> }

KT>этот код просто рисует рамку в форме.Проблема в том что когда я начинаю менять размер окна то рамка не прорисовывается с учетом нового размера окна.Хотя сообщение WM_PAINT пирходит так как идет звуковой сигнал.Но если растянутое окно минимизировать а затем поднять то все прорисовывается.В чем проблема.Единственное что приходит на ум так то что при ресайзе

KT>int Height = e.ClipRectangle.Height;
KT>int Width = e.ClipRectangle.Width;
KT>не получают новые размеры окна.А при минимайзе получают.
KT>Как исправить?
Строго говоря, ClipRectangle содержит минимальный прямоугольник, охватывающий инвалидную область окна, которую и нужно перерисовать. ИМХО, лучше сразу брать ClientRectangle.
А для исправления добавь обработчик:

private void Form1_Resize(object sender, EventArgs e)
{
    Invalidate();
}

Тогда добавляется сообщение WM_ERASEBKGND.
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.