создал простое MDI приложение в котором есть окно для рисования графики.Для окна написал простой обработчик сообщения WM_PAINT.
Код C#
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
int boarder = 10;
int Height = e.ClipRectangle.Height;
int Width = e.ClipRectangle.Width;
System.Console.Beep(4000,10);
System.Drawing.Graphics gr = e.Graphics;
Color color = Color.Red;
Pen pen = new Pen(color);
Rectangle rect = new Rectangle(boarder,boarder,Width-20,Height-20);
gr.DrawRectangle(pen,rect);
}
этот код просто рисует рамку в форме.Проблема в том что когда я начинаю менять размер окна то рамка не прорисовывается с учетом нового размера окна.Хотя сообщение WM_PAINT пирходит так как идет звуковой сигнал.Но если растянутое окно минимизировать а затем поднять то все прорисовывается.В чем проблема.Единственное что приходит на ум так то что при ресайзе
int Height = e.ClipRectangle.Height;
int Width = e.ClipRectangle.Width;
не получают новые размеры окна.А при минимайзе получают.
Как исправить?
Здравствуйте, 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.
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
Здравствуйте, Кондраций, Вы писали:
К>Строго говоря, ClipRectangle содержит минимальный прямоугольник, охватывающий инвалидную область окна, которую и нужно перерисовать. ИМХО, лучше сразу брать ClientRectangle.
К>А для исправления добавь обработчик:
К>К>private void Form1_Resize(object sender, EventArgs e)
К>{
К> Invalidate();
К>}
К>
Ну, или другой вариант. Установить в конструкторе в
стиле флаг ResizeRedraw.