0

我正在尝试创建一个矩形并为反向(该矩形之外的区域)区域着色。

Gdiplus::Region *cropRegion = new Gdiplus::Region(cropRectF);
Gdiplus::Rect gdiCropRect(0.0f, 0.0f, 1000.0f, 1000.0f);

Gdiplus::Rect imageContainer(0.0f, 0.0f, 1000.0f, 1000.0f);
Gdiplus::Region *completeRegion = new Gdiplus::Region(imageContainer);
completeRegion->Intersect(cropRegion);

gdiGraphics.SetClip(completeRegion, Gdiplus::CombineModeXor);

Gdiplus::GraphicsPath *cropRectPath = new Gdiplus::GraphicsPath();
cropRectPath->AddRectangle(cropRectF);

Gdiplus::Pen* myPen = new Gdiplus::Pen(Gdiplus::Color::White);
myPen->SetWidth(1);
gdiGraphics.DrawPath(myPen, cropRectPath);

Gdiplus::SolidBrush dimmingBrush(Gdiplus::Color::MakeARGB(50, 0, 0, 0));
gdiGraphics.FillRegion(&dimmingBrush, completeRegion);

到这里的代码工作得很好,

但是,当我尝试在 MouseMove CallBack 中使用鼠标移动移动此矩形时,它会移动但会留下白色痕迹。

最后我尝试调用 InvalidateRect 但我的矩形根本没有移动。任何想法如何清除旧矩形。我正在使用 GDI+ 和 C++。谢谢

4

0 回答 0