gpt4 book ai didi

c++ - 使用 GDI+ 绘制文本

转载 作者:可可西里 更新时间:2023-11-01 13:27:59 25 4
gpt4 key购买 nike

我已经搜索了几天,以找到在我的 GDI+ 应用程序上显示文本的可能性。

我尝试使用 GDI+ 的 DrawString() 函数,但 MSDN 上的引用文献不起作用,因为它与参数列表不匹配。我正在使用 Visual C++ 2010 Express。

我更改了 MSDN 示例以使其编译,如下所示:

LinearGradientBrush* myBrush = new LinearGradientBrush(Rect(0,0,width,height),Color::Red, Color::Yellow, LinearGradientMode::LinearGradientModeHorizontal);
Font* myFont = new Font(hdc);
RectF rect = RectF(10,10,100,100);
graphics.DrawString(TEXT("Look at this text!"),100, myFont,rect,&StringFormat(0,0), myBrush);

我还尝试了另外两个功能:

TextOut(hdc,10,10,TEXT("Text"),6);
DrawText(hdc,TEXT("Text"),0,LPRECT(0),0);

它们都没有在屏幕上显示文本。画线、椭圆等都没有问题。

为什么上面的文本绘制例程不起作用?任何人都可以提供一个工作示例吗?

最佳答案

你犯了一个相当经典的错误,没有检查 Graphics::DrawString() 的返回值,它会告诉你你做错了什么。 InvalidParameter 很可能在这里。还不清楚此代码在哪个上下文中运行,最好在 WM_PAINT 消息处理程序中运行,否则您将永远看不到输出。也没有清理代码的证据,因为代码严重泄漏了对象。

让我们从一个完整的示例开始,从 Win32 项目模板生成的样板代码开始。我知道您已经使用了其中一些功能,但阅读此答案的其他人可能会感兴趣。首先提供所需的#includes:

#include <assert.h>
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib, "gdiplus.lib")

找到WinMain函数,我们需要初始化GDI+:

// TODO: Place code here.
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
Status st = GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
assert(st == Ok);
if (st != Ok) return FALSE;

在消息循环之后的函数末尾:

GdiplusShutdown(gdiplusToken);
return (int) msg.wParam;

现在找到窗口过程 (WndProc) 并使 WM_PAINT 案例与此类似:

case WM_PAINT: {
hdc = BeginPaint(hWnd, &ps);
Graphics gr(hdc);
Font font(&FontFamily(L"Arial"), 12);
LinearGradientBrush brush(Rect(0,0,100,100), Color::Red, Color::Yellow, LinearGradientModeHorizontal);
Status st = gr.DrawString(L"Look at this text!", -1, &font, PointF(0, 0), &brush);
assert(st == Ok);
EndPaint(hWnd, &ps);
} break;

产生这个:

enter image description here

按照您认为合适的方式修改此代码,断言将使您远离麻烦。

关于c++ - 使用 GDI+ 绘制文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7299196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com