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