[英]Drawing Text with GDI+
我已經搜索了幾天,以便找到在我的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;
產生這個:
根據需要修改此代碼,斷言將使您免於麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.