如何在 C# 中转换这段代码以使其在 C++ 中工作?

How do I convert this piece of code in c# to make it work in c++?

我的目标是使用 c++/cli 捕获 windows 表单的屏幕。下面是捕获 window 的代码,但是它是在 C# 中。我必须对代码进行哪些更改才能在 C++ 中工作?

Graphics myGraphics = this.CreateGraphics();
       Size s = this.Size;
       memoryImage = new Bitmap(s.Width, s.Height, myGraphics);
       Graphics memoryGraphics = Graphics.FromImage(memoryImage);
       memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s);

我尝试过的: 我试过在 c++ 中使用下面的代码,但是,我在 ** ** 中的部分出现错误。 错误说预期一个;在 Size 即 Size 之后; s = 这个-> 大小;这对我来说没有意义

Graphics^ myGraphics = this->CreateGraphics();
    Size **s** = this->Size;
    memoryImage = gcnew Bitmap(**s**->Width, s->Height, myGraphics);
    Graphics^ memoryGraphics = Graphics::FromImage(memoryImage);
    memoryGraphics->CopyFromScreen(this->Location.X, this->Location.Y, 0, 0, s);

您的代码看起来基本正确。

  • 我认为 Size s 越来越混乱,因为 Size 既是类型的名称,也是此对象上 属性 的名称。它认为您正在尝试检索 Size 属性 并丢弃结果。要解决此问题,请使用声明类型的全名:System.Drawing.Size s = this->Size;。 (您也可以使用 auto,或者完全删除局部变量并多次调用 this->Size。)
  • System.Drawing.Size 是一个值结构,而不是引用 class。是值类型,不是引用类型,所以需要做s.Widths.Height
    • 这个类似于Location:Location returns一个Point,是一个值类型,而你已经在做Location.X,而不是Location->X