« オーディオプレイヤ開発記 その8 | メイン | はてなからの逃亡 »

2006/02/09(木)

●オーディオプレイヤ開発記 その9


 それでは、メニューの作成・管理・破棄を行う CMenu クラスを作成していきます。

 まず、CFrameWnd クラスに、

virtual BOOL SetMenu(HMENU hMenu) {
    return ::SetMenu(m_hWnd, hMenu);
}

などと追加しておき、CMenu クラスを以下のようにします。

//----------------------------------------------------------------------------
// Menu.h : メニューの作成・管理・破棄を行う
//----------------------------------------------------------------------------
#ifndef MenuH
#define MenuH
//----------------------------------------------------------------------------
// メニューの作成・管理・破棄を行うクラス
//----------------------------------------------------------------------------
class CMenu
{
public: // 関数

    CMenu(): m_hMenu(0) { }
    virtual ~CMenu() { Destroy(); }

    // メニューの末尾に新しい項目を追加
    virtual BOOL Append(UINT uFlags, UINT_PTR uIDNewItem = 0,
                        LPCTSTR lpNewItem = NULL) {
        // uFlags       : 設定フラグ
        // uIDNewItem   : コマンド ID または HMENU
        // lpNewItem    : メニュー項目の内容
        return AppendMenu(m_hMenu, uFlags, uIDNewItem, lpNewItem);
    }

    // メニューの末尾に区切り線を追加
    virtual BOOL AppendSeparator() {
        return AppendMenu(m_hMenu, MF_SEPARATOR, 0, NULL);
    }

    virtual BOOL Create() {
        Destroy();
        m_hMenu = CreateMenu();
        if(!m_hMenu) return FALSE;
        return TRUE;
    }
    virtual BOOL CreatePopup() {
        Destroy();
        m_hMenu = CreatePopupMenu();
        if(!m_hMenu) return FALSE;
        return TRUE;
    }
    virtual void Destroy() {
        if(m_hMenu) DestroyMenu(m_hMenu), m_hMenu = 0;
    }

protected: // メンバ変数

    HMENU m_hMenu;

public: // メンバ変数の取得・設定

    operator HMENU() const { return m_hMenu; }
};
//----------------------------------------------------------------------------

#endif

 チェックマークをつける機能など、まだまだ必要な機能はいくつかあると思いますけど、それはまあ必要になり次第ということで。とりあえずこれで、CMenu クラスを継承した CMenu_MainWnd などという、メインウィンドウ用のメニューを管理するクラスを作っておき、CMainWnd クラスから適宜それを呼び出すというような使い方ができるようになりました。ここまでのソースコードはこちら ( Hayaemon20060209_src.lzh ) 。

トラックバックURL

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

コメントする