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

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

また、助けていただきました・・・12/22 日

「たぶん、リソースの開放がうまくいっていないんだろうなあ」と思っていたのですが、自分では場所が特定できなかったので、いつも頼りにしている teratail で質問してみました。


 その結果、実際に不具合のある場所をおしえていただくことができ、アプリの動作は明らかに改善されました。具体的なプログラムを以下に、メモしておきます。

	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();
		wstring wmouseMode;
		switch (mouseMode) {
			case MODE_DONE:		wmouseMode = L"MODE_DONE"; break;
			case MODE_CLICK:	wmouseMode = L"MODE_CLICK"; break;
			case MODE_WAKU1:	wmouseMode = L"MODE_WAKU1"; break;
			case MODE_WAKU2:	wmouseMode = L"MODE_WAKU2"; break;
			case MODE_END1:		wmouseMode = L"MODE_END1"; break;
			case MODE_END2:		wmouseMode = L"MODE_END2"; break;
			default:			wmouseMode = L"default"; break;
		}

		StretchBlt(hdc, 0, 0, cx, cy, mem, 0, myTop, width, tate, SRCCOPY);
		TextOut(hdc, 200, 50, wmouseMode.c_str(), (int)wmouseMode.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