无法从 Win32 C++ GDI+ 中的函数返回图形对象

Posted

技术标签:

【中文标题】无法从 Win32 C++ GDI+ 中的函数返回图形对象【英文标题】:Can't return Graphics object from a function in Win32 C++ GDI+ 【发布时间】:2020-05-07 13:36:56 【问题描述】:

我正在创建一些有助于一点点 GDI+ 的函数。我已经创建了这个函数来开始绘制在 WM_PAINT 中使用:

Graphics StartPaint(HWND win, HDC *hdc, PAINTSTRUCT *ps)

    *hdc = BeginPaint(win, ps);
    Graphics g(*hdc);
    return g;

它给出了编译错误并将我带到“gdiplusgraphics.h”并指向 这一行:

Graphics(const Graphics&);

说它是私有的。

经过几次尝试,我发现问题出在函数中的 return 语句上。为什么return语句会报这样的错误,我该如何解决这个问题?

我使用代码块。

谢谢。

【问题讨论】:

确切的错误是什么?错误指向的行似乎是 Graphics 对象的复制构造函数。 您不能复制构造Graphics 对象。这应该是显而易见的。值得怀疑的是你希望StartPaint 解决的问题。 另外请描述一下您要做什么...至少可以说是奇怪 @wally 尝试在函数外部复制图形对象时,返回语句中出现错误。 一个 GDI+ Graphics 对象包装了一个 device context。由于显而易见的原因,Windows API 不提供像 DuplicateDCCopyDC 这样的调用。由于这些 API 调用没有意义,因此很容易理解为什么您不能复制分配或复制构造 Graphics 对象。 【参考方案1】:

谢谢大家。该函数现在运行良好,如下所示:

Graphics *StartPaint(HWND win, HDC *hdc, 

PAINTSTRUCT *ps)

    *hdc = BeginPaint(win, ps);
    return new Graphics(*hdc);

【讨论】:

以上是关于无法从 Win32 C++ GDI+ 中的函数返回图形对象的主要内容,如果未能解决你的问题,请参考以下文章

来自 wchar_t* 的 C++ Win32 GDI+ 拉绳

是否可以使用 WIN32 API 和 GDI+ (C++) 对工具提示进行样式化

如何使用 Win32/GDI 加载 PNG 图像(如果可能,不要使用 GDI+)?

GDI Image::Save 返回 Win32Error

使用 GDIPlus (WIN32 C++) 显示存储为 alpha 资源的图标

C++ Win32 中的 C# DateTime.ToUniversalTime() [关闭]