2006/08/08(火)VC++ 2005 EE

久しぶりに,Windowsプログラムを書いてみた.VC6は古いので,この春にMicrosoftが配付していた,Microsoft Visual C++ 2005 Express Editionをいじってみた.で,フリーであっただけのことはあって,リソースエディタは入ってないし,MFC等の古いライブラリも無し.そのため,地道にSDKで書くことに...

とりあえず,ステータスバーを付けて,ウィンドウを3分割し,それぞれサイズ変更できるようにするだけなんだけど... MFCを使っていたときよりも自由度は高いけど,メッセージ処理とかが大変.WM_SIZEイベントの発生するタイミングとか不明なのでどうにも怪しいことに.かなり微妙な線を行きながら,なんとか1日掛けて作り上げた.

めもオブジェクトのメソッドをウィンドウプロシージャにするための逃げ道.\スタティックメンバを作っておき,ウィンドウのユーザデータにオブジェクトを入れてしまう.\あとは,ウィンドウからオブジェクトを取り出して,メソッドを呼び出す.

// ウィンドウプロシージャ
static LRESULT CALLBACK Tree::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    WNDPROC ParentWndProc = (WNDPROC)GetWindowLongPtr(hWnd, GWL_USERDATA);
    return CallWindowProc(ParentWndProc, hWnd, message, wParam, lParam);
}

int Init(...)
{
    // ウィンドウプロシージャの登録
    tree->m_ParentWndProc = (WNDPROC)SetWindowLongPtr(tree->m_hWnd, GWL_WNDPROC, (LONG)WndProc);
    SetWindowLongPtr(tree->m_hWnd, GWL_USERDATA, (DWORD)tree->m_ParentWndProc);
...
}