>>860
グローバルスコープに実体を作るとコンストラクタ・デストラクタの呼ばれる
タイミングが曖昧になるので、どこかでnew, deleteするのがいいかも。
(俺は面倒臭いのでドーンと宣言してる(・w・))

// グローバル
CHoge *g_pHoge;

void WndProc(...)
{
  /* いろいろ省略 */

  case WM_CREATE:
    g_pHoge = new CHoge;
    break;

  case WM_DESTROY:
    delete g_pHoge;
    break;
}

クラスの作り方は問題ないかもしれない。
というより俺のクラスに対する基準が間違ってる可能性もあるわけで・・・。
他の人の意見も聞きたいねぇ。

ソース見てて気になったのはWM_PAINTメッセージを処理してるところ。
ここでCreateCompatibleDC()やDeleteDC()は呼ばない方がいいかも。