无法从 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 不提供像 DuplicateDC
或 CopyDC
这样的调用。由于这些 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+)?