« ホッキ貝のサラダ | メイン | FMV-BIBLO LOOX P70R 購入記 »

2006/02/01(水)

●オーディオプレイヤ開発記 その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 ) 。

トラックバックURL

このエントリーのトラックバックURL:
http://www.edolfzoku.com/diary/mt-tb.cgi/111

コメントする