また、助けていただきました・・・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;
