Я создаю графическое приложение, используя win-формы GLControl. Пользователь должен иметь возможность увеличивать любую область на графике. Я думал о том, чтобы позволить пользователю нарисовать прямоугольник всякий раз, когда он удерживает левую кнопку мыши и перетаскивает его. Новый увеличенный экран будет иметь координаты этого прямоугольника. Я реализовал System.Drawing.Graphics.DrawRectangle
в GlControl1_MouseMove
, но он ничего не рисует, хотя событие проверяется с помощью точки останова.
private void Form4_Load(object sender, EventArgs e)
{
load_Model(); ///Function for setting up the shaders
glControl1.Invalidate();
_timer = new System.Timers.Timer(10.0);
_timer.Elapsed += TimerElapsed;
_timer.Start();
}
private void Form4_Paint_1(object sender, PaintEventArgs e)
{
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.UseProgram(shader.Use());
glControl1.SwapBuffers();
}
private void TimerElapsed(object sender, ElapsedEventArgs e)
{
glControl1.Invalidate();
}
Vector2 mousePos;
private void GlControl1_MouseMove(object sender, MouseEventArgs e)
{
if (isDown)
{
Pen drwaPen = new Pen(Color.Black, 2);
Rectangle rect = new Rectangle(Convert.ToInt32(mousePos.X), Convert.ToInt32(mousePos.Y), Math.Abs(e.X-Convert.ToInt32(mousePos.X)), Math.Abs(e.Y-Convert.ToInt32(mousePos.Y)));
System.Drawing.Graphics Formgraphics = this.CreateGraphics();
Formgraphics.DrawRectangle(drwaPen, rect);
}
}
private void GlControl1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mousePos = new Vector2(e.X, e.Y);
isDown = true;
}
}
private void GlControl1_MouseUp(object sender, MouseEventArgs e)
{
isDown = false;
}
Нужно ли что-либо изменять в функции Paint
?