ひとりも見捨てないことを、あきらめない

学校教育、社会教育、数学、技術家庭科、Youtube、EdTech、ICT、プログラミング、その他

リソースの開放に成功しました 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;

f:id:takase_hiroyuki:20191123160855p:plain