Visual c++ 绘制连续矩形 我目前在Visual C++ 2008快速版上工作。 在我的项目中,我有一个包含图像的picturebox,现在我必须绘制一个矩形,以便用户能够选择图像的一部分。。 我使用picturebox的MouseDown事件和以下代码绘制了一个矩形: Void pictureBox1_MouseDown(System::Object^ sender, Windows::Forms::MouseEventArgs^ e) { Graphics^ g = pictureBox1->CreateGraphics(); Pen^ pen = gcnew Pen(Color::Blue); g->DrawRectangle( pen , e->X ,e->Y,width,ht); }

Visual c++ 绘制连续矩形 我目前在Visual C++ 2008快速版上工作。 在我的项目中,我有一个包含图像的picturebox,现在我必须绘制一个矩形,以便用户能够选择图像的一部分。。 我使用picturebox的MouseDown事件和以下代码绘制了一个矩形: Void pictureBox1_MouseDown(System::Object^ sender, Windows::Forms::MouseEventArgs^ e) { Graphics^ g = pictureBox1->CreateGraphics(); Pen^ pen = gcnew Pen(Color::Blue); g->DrawRectangle( pen , e->X ,e->Y,width,ht); },visual-c++,c++-cli,continuous,Visual C++,C++ Cli,Continuous,现在在DrawRectangle中,参数width和ht是静态的,因此上面的代码将在用户在picturebox中的图像上按下鼠标按钮的位置绘制一个矩形。。。 我想让用户能够拖动光标并绘制一个他想要的矩形。。 请帮我解决这个问题。。 Thanx 不应在事件处理程序中直接绘制到窗口-所有绘制都应在绘制事件处理程序中 要使其正常工作,您可以做更多的工作,但您需要的技术核心是: 要在用户拖动鼠标时移动矩形,必须处理鼠标移动事件。每次获得一个窗口时,都需要使其无效,从而导致重新绘制窗口。在绘制处理程序中,

现在在DrawRectangle中,参数width和ht是静态的,因此上面的代码将在用户在picturebox中的图像上按下鼠标按钮的位置绘制一个矩形。。。 我想让用户能够拖动光标并绘制一个他想要的矩形。。 请帮我解决这个问题。。
Thanx

不应在事件处理程序中直接绘制到窗口-所有绘制都应在绘制事件处理程序中

要使其正常工作,您可以做更多的工作,但您需要的技术核心是:

要在用户拖动鼠标时移动矩形,必须处理鼠标移动事件。每次获得一个窗口时,都需要使其无效,从而导致重新绘制窗口。在绘制处理程序中,如果鼠标按钮按下,则获取鼠标指针位置并在该位置绘制矩形

这将让你开始,但它会有一些问题-窗口将闪烁,因为它不断地重画,它可能有点慢

您还可以做其他事情来改善这一点,包括:

仅使窗体中需要删除旧矩形和绘制新矩形的部分无效

失效后,立即调用Update以使重画尽快发生

双缓冲渲染,和/或将窗口内容存储在屏幕外位图中,以便可以更快速地重新渲染顶部矩形的背景,而不会闪烁。但这是一项相当先进的技术