MFCを使用して単純なゲームを実装しました。画像と書式付きテキストが含まれています。テスト中、問題なく約7分間プログラムを実行した後、画像が消えてテキストフォーマットがリセットされることがわかりました。問題を特定するために、書式付きテキストのみを表示する非常に基本的なバージョンを書き直しました。しかし、問題はまだ続き、私は1日のためにグーグルではありますが、問題はまだ同じです。ここに私のOnPaintメソッドがありますWin32 C++のDrawTextでメモリ使用量が増加する
CPaintDC dc(this);
CRect clientRect;
GetClientRect(&clientRect);
CDC bitmapDC;
bitmapDC.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, clientRect.Width(), clientRect.Height());
bitmapDC.SelectObject(&bitmap);
CBrush backgroundBrush;
backgroundBrush.CreateSolidBrush(RGB(0xf8, 0xf8, 0xf8));
bitmapDC.FillRect(&clientRect, &backgroundBrush);
int SavedDc = bitmapDC.SaveDC();
long nHeight = -MulDiv(20, GetDeviceCaps(bitmapDC, LOGPIXELSY), 72);
HFONT myfont = CreateFont(nHeight, 0, 0, 0, FW_ULTRALIGHT, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, VARIABLE_PITCH, TEXT("Arial"));
bitmapDC.SelectObject(myfont);
SetBkMode(bitmapDC, TRANSPARENT);
bitmapDC.DrawText(L"This shouldn't happen", &clientRect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
dc.BitBlt(0, 0, clientRect.Width(), clientRect.Height(), &bitmapDC, 0, 0, SRCCOPY);
bitmapDC.RestoreDC(SavedDc);
backgroundBrush.DeleteObject();
bitmap.DeleteObject();
bitmapDC.DeleteDC();
Visual Studioでメモリ使用量が徐々に増えているのがわかります。私がDrawTextの部分をコメントアウトすると、それ以上は増加しません。私は何か間違っているのですか?どのようにDrawTextメソッドをメモリ使用量の増加から保護することができますか?私も画像でテストしましたが、それは同じ問題です。私は何とかDrawTextをリリースするか、削除する必要がありますか?どんな助けでも大歓迎です。
あなたはmyfontを削除していません。 –
@JonathanPotterあなたは、増加を止めたのは正しいです。私は画像を描画したい場合は、CImageオブジェクトを削除するだけで十分ですか?私はちょうどそれをテストし、単純にCImageを削除しても増加は止まらない。手伝ってくれてどうもありがとう。 – Revangelis
どこでもCImageは表示されません。 –