質問: FALSE; // マウスボタンを押していない状態にする } else { return DefWindowProc( hWnd3, msg, wp, lp ); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd3, msg, wp, lp)); } return 0; } ```
回答: Windowsでの描画の基本ができていません。 ・描画は基本的にWM_PAINTだけで行う。 ・BeginPaintで得られたHDCはEndPaint以降は使用しない(ReleaseDCも不要) ・SelectObjectする際は、戻り値を保持しておき、後で戻す。 ・SelectObjectでHDCに選択された状態のリソース(HPENなど)は、DeleteObjectで削除しようとしても削除されず、リソースリークを引き起こす。 ・マウスボタンのON/OFFの判断をメッセージ(WM_LBUTTONDOWN/WM_LBUTTONUPなど)だけで行うと、ボタンを押したままウィンドウ外に移動してボタンを離して戻ってきた場合や、他のアプリなどがポップアップウィンドウを表示した場合に正しく処理できない。 特に、最後の部分については、ドラッグ中にポップアップウィンドウが表示されると、ボタンを離した状態でもドラッグ操作を続けてしまうバグを持つアプリをよく見かけます。