Вы совершаете довольно классическую ошибку, не проверяя возвращаемое значение Graphics :: DrawString (), оно сообщит вам, что вы сделали неправильно.InvalidParameter довольно вероятно здесь.Также совершенно неясно, в каком контексте выполняется этот код, лучше быть внутри обработчика сообщений WM_PAINT, иначе вы никогда не увидите вывод.Также нет никаких доказательств очистки кода, поскольку данный код плохо пропускает объекты.
Давайте работать на полном примере, начиная с стандартного кода, сгенерированного шаблоном Win32 Project.Я знаю, что некоторые из них уже работают, но это может быть интересно для других, читающих этот ответ.Начните с предоставления требуемого #include:
#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;
, который производит это:
Измените этот код по своему усмотрению, так как утверждения будут препятствовать вам.