C++ 快速gdi+;文本输出

C++ 快速gdi+;文本输出,c++,windows,gdi,C++,Windows,Gdi,我想做一个坐标系。我将线条和窗口设置为可缩放的,因此它可以实时绘制场景。当我画线的时候,它就像我想要的那样工作,但是当我添加一个数字的时候,程序会变慢,当我尝试调整窗口大小的时候,它会变慢 VOID OutputNumber(HDC hdc, Color c, int x, int y, TCHAR number[]) { FontFamily fontFamily(L"Arial"); Font font(&fontFamily

我想做一个坐标系。我将线条和窗口设置为可缩放的,因此它可以实时绘制场景。当我画线的时候,它就像我想要的那样工作,但是当我添加一个数字的时候,程序会变慢,当我尝试调整窗口大小的时候,它会变慢

VOID OutputNumber(HDC hdc, Color c, int x, int y, TCHAR number[]) 
{
    FontFamily   fontFamily(L"Arial");
    Font         font(&fontFamily, 12, FontStyleBold, UnitPoint);
    RectF        rectF(x, y, 50.0f, 50.0f);
    PointF       pointF(x, y);
    SolidBrush   solidBrush(c);
    Graphics     graphics(hdc);
    graphics.DrawString(number, -1, &font, pointF, &solidBrush);
}
我尝试了常规的
文本输出(hdc,x,y,_T(“0”),1),但我的速度和DrawString方法一样慢。你们中有谁知道一种更快的方式将文本或数字打印到场景中吗

编辑,这是我使用函数的方式:

TCHAR pozn[10] = { 0 };
for (int i = 1; i < width; i++) {

        wsprintfW(pozn, L"%d", i);
        int x = width / 2 + (2 * i * CM);

        // pale
        OnPaintW(hdc, Color(50, 0, 0, 0), x, 0, x, height, 1);
        OutputNumber(hdc, Color(255, 0, 0, 0), width / 2 + (2 * i * CM),height / 2 + 3, pozn);
    }
tcharpozn[10]={0};
对于(int i=1;i
当您尝试输出单个值时,您是否确实创建了所有对象(而不是释放它们)?为什么不创建一次呢?我也不确定你指的是什么,但我正在一个接一个地创建对象。我添加了一个编辑来演示如何进行。如果不在每次绘制时创建FontFamily,速度会更快吗?@user253751如果我将FontFamily设置为全局,它将根本不会打印数字,如果我在WndProc函数中声明并将其作为变量传递,我会得到一个错误:“错误C2248:'Gdiplus::FontFamily::FontFamily':无法访问在类'Gdiplus::FontFamily'中声明的私有成员”“为什么不将所需资源(主要是
Font
)作为字段放在窗口中?它们至少应该与窗口具有相同的生存期。”。