用GDI +绘图文本

我已经search了几天,现在find一个可能性,以显示我的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); 

我还尝试了另外两个function:

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

没有一个在屏幕上显示文字。 画线,椭圆等没有问题。

为什么上面的文本绘图程序没有工作? 任何人都可以提供一个工作的例子?

Solutions Collecting From Web of "用GDI +绘图文本"

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

让我们从完整的例子开始,从Win32项目模板生成的样板代码开始。 我知道你已经有一些已经工作,但读这个答案的人可能会感兴趣。 首先给出所需的#包括:

 #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; 

这产生这个:

在这里输入图像说明

修改这个代码,你认为合适,断言将让你摆脱困境。

MSDN是你的朋友(真实的东西): 绘制一个行代码示例:编译并运行并绘制一个字符串 – 在前一个替换OnPaint()。