●オーディオプレイヤ開発記 その2
さて、今回からウィンドウの表示に入りますが、Windows SDK / C++ で作るので、ウィンドウに関するクラスなどは、ある程度作っておいた方が後々ラクになってくるでしょう。他のソフトを作るときなんかにも流用できるでしょうし。ちなみに、今までのソフトでも一応、ウィンドウクラスは作ってましたが、もうちょっと使いやすいのができればいいかなあと思います。まあウィンドウクラスなんて言っても、MFC や ATL のように大層なものではなく、自分の使う範囲の機能だけを使えるようにしておけば、自分で使う分にはオッケーです。
とりあえず、ウィンドウやラベル、ボタンなどの基底クラスを作りますが、クラス名は、MFC にならって CWnd でいいですかね。まずはそこに、HWND 変数とか SetPos 関数とか、ウィンドウやラベルなどに共通する機能を持たせます。以下のようなクラス階層になりますね。
CWnd
├ CFrameWnd
├ CButton
└ その他、いろいろ
では、さっそく CWnd クラスを作ってみます。
//----------------------------------------------------------------------------
// Wnd.h : ウィンドウやラベルなどの基底クラス
//----------------------------------------------------------------------------
#ifndef WndH
#define WndH
//----------------------------------------------------------------------------
// ウィンドウやラベルなどの基底クラス
//----------------------------------------------------------------------------
class CWnd
{
public: // 関数
CWnd(): m_hWnd(0) { }
virtual ~CWnd() { Destroy(); }
// 破壊
virtual void Destroy() {
if(m_hWnd) DestroyWindow(m_hWnd), m_hWnd = 0;
}
protected: // メンバ変数
HWND m_hWnd;
public: // メンバ変数の取得・設定
operator HWND() const { return m_hWnd; }
};
//----------------------------------------------------------------------------
#endif
できたー!って、うん、何の機能もないですよ。前途多難ってのは、こういうことを言うんでしょうかね(笑)。CWnd クラス内で、
operator HWND() const { return m_hWnd; }
と定義しているので、例えば、
CWnd wnd;
HWND hWnd = wnd;
などとした場合には、hWnd に wnd.m_hWnd の値が入ってくれる……はず。
では次回から、これにちょっとずつ機能を追加していく予定です。ここまでのソースコードはこちら ( Hayaemon20060201_src.lzh ) 。