●オーディオプレイヤ開発記 その5
そろそろメインウィンドウクラスを作成していきたいところですが、再生時間表示用のラベルやスライダー、プレイリスト表示用のリストビューなどを WM_CREATE の時点で作成したいので、まずは CWnd クラスから OnCreate 関数を呼ぶようにしておきます。はじめに、CWnd クラスに、
// メッセージ
virtual LRESULT OnCreate(LPCREATESTRUCT lpCreateStruct) {
return WindowProc(WM_CREATE, 0, (LPARAM)lpCreateStruct);
}
などと追加しておき、Wnd.cpp の WndProc を以下のようにします。
LRESULT CALLBACK CWnd::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
CWnd* pWnd = (CWnd*)GetProp(hWnd, st_strClassPtr.c_str());
if(!pWnd) {
if(uMsg == WM_CREATE || uMsg == WM_NCCREATE)
pWnd = (CWnd*)((LPCREATESTRUCT)lParam)->lpCreateParams;
if(pWnd) {
pWnd->m_hWnd = hWnd;
pWnd->SetProc();
}
}
if(pWnd) {
switch(uMsg)
{
case WM_CREATE:
return pWnd->OnCreate((LPCREATESTRUCT)lParam);
}
LRESULT lResult = pWnd->WindowProc(uMsg, wParam, lParam);
if(uMsg == WM_DESTROY) pWnd->ResetProc();
return lResult;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
これで、WM_CREATE が来た時点で、先ほど作った OnCreate が呼ばれるようになりました。もし、CFrameWnd クラスを継承した CMainWnd というクラスを作り、OnCreate 関数を定義した場合には、CMainWnd の OnCreate 関数の方が呼ばれることになります。ここまでのソースコードはこちら ( Hayaemon20060205_src.lzh ) 。