リソースの開放に成功しました 12/25 水
昨日の記事で、リソースをどんどん浪費する様子をみていただきました。
Visual Studio 2019 で C++ でアプリを作成しています。
プログラムで使用したリソースは、プログラムの中で開放します。実際にリソースを開放するようにプログラムできたので、画面上の上から6番目の数字は、ほとんど変化しなくなりました。
具体的には、プログラム中の VM_PAINT のなかで、リソースの開放を実施しています。以下、ソースプログラムを示します(自分用メモ)。
case WM_PAINT: { // ここから実際の描写 PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // ⇒ ReleaseDC(hWnd, hdc);で開放する HDC mem = CreateCompatibleDC(hdc); // ⇒ DeleteDC(mem);で開放する HBITMAP bmp = CreateCompatibleBitmap(hdc, width, height); HGDIOBJ obmp = SelectObject(mem, bmp); img.Draw(mem, 0, 0, width, height, 0, 0, width, height); for (int i = 0; i < maxWaku; i++) { DrawWaku(mem, i); } DrawCursor(mem); nowWaku = CheckMouse(); StretchBlt(hdc, 0, 0, cx, cy, mem, 0, myTop, width, tate, SRCCOPY); wstring wmouseMode; switch (mouseMode) { case MODE_NONE: wmouseMode = L"MODE_NONE"; break; case MODE_WAKU: wmouseMode = L"MODE_WAKU"; break; case MODE_END: wmouseMode = L"MODE_END"; break; default: wmouseMode = L"default"; break; } TextOut(hdc, 200, 50, wmouseMode.c_str(), (int)wmouseMode.length()); if (flmouse) { wstring ww = L"■"; TextOut(hdc, 180, 50, ww.c_str(), (int)ww.length()); } si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_POS | SIF_RANGE | SIF_PAGE; si.nMin = 0; si.nMax = height - tate; si.nPos = myTop; SetScrollInfo(hWnd, SB_VERT, &si, TRUE); EndPaint(hWnd, &ps); SelectObject(mem, obmp); DeleteObject(bmp); DeleteDC(mem); ReleaseDC(hWnd, hdc); } break;