メルマガ:あゆしゃのC言語プログラミング
タイトル:あゆしゃのC言語プログラミング(Vol.606) CE22 メニューの処理5  2005/09/28


/*========================================================*/
    <<<あゆしゃのC言語プログラミング>>>
/*========================================================*/
 第606回 CE22 メニューの処理5
 発行    2005年9月28日(水曜日)
 発行数   約2500

{magclick}
/*========================================================*/
 はじめに ( 決り文句 )
/*========================================================*/
・このメールマガジンは、主にまぐまぐさんから発行しています。
・ジャンルは、マルチメディアのプログラム、C言語です。
・横60文字で作成し、インデントは大抵半角スペース4つです。
・ここで扱うプログラムは、C言語と半光年以内のものです。
・登録解除は、メルマガのホームページでお願いします。
・過去ログはバックナンバー(下欄参照)を活用して下さい。
・内容は私が感じたもので、最新の技術も、へたれもあります。
・わかりやすさを優先させる為、たまに嘘があるかもしれません。

/*========================================================*/
 ご挨拶
/*========================================================*/

 こんにちは。あゆしゃです。

 というわけで、グランディアで頭がいっぱいのあゆしゃです。

 前回、このページを紹介しました。

http://ayusya.hp.infoseek.co.jp/GameGrandia3_Card.html

 この計算アルゴリズムを元に、GUIを使ってカードを切り替えて
より詳細な統計を行うソフトも作りました。

 なんだかもう、駄目っぽいです。

{magclick}
/*========================================================*/
 今回のお題  << CE22 メニューの処理5 >>
/*========================================================*/

 手短に行きましょう。

 前回の反省点を元に、プログラムを書き直しましょう。

 ツールクラスは、ボタンのオブジェクトを配列で持ちます。

class CCETool : public CCEImage
{
public:
    enum { ITEM_NUM = 2 };
    CCEBottom items[ ITEM_NUM ] = {
        CCEBtnRound(), CCEBtnSquare()
    };
};

 各ボタンのオブジェクトは、自分自身の情報をコンストラクタで
初期化しておきます。

class CCEBtnRound : public CCEButton
{
public:
    CCEBtnRound()
    {
        // 当たり判定のサイズを決定
        const int margin = 8;
        rc.left = margin;
        rc.right = margin + 80;
        rc.top = margin;
        rc.bottom = margin + 16;
        
        // 選択形式
        seltype = SELTYPE_CLICK;
        
        // 文字列
        caption = "円";
        
        // 値指定形式
        numtype = NUMTYPE_NUMBER;
        
        // 値指定の値
        for( int i = 0; i < 7; i++ )
        {
            numvalue[ i ] = 1 << i;
        }
        numvalue_num = i;
    }
};

 同様なものを、角メニューについても作成しておきます。

 クラスがポコポコできるのもなんですから、これらはCCEToolの
中に定義するとしましょう。

 ボタンクラスに、ボタンに必要な定義を置いておきます。

class CCEButton
{
public:
    CRect rc;               // 当たり判定のサイズ
    
    // 選択形式
    enum {
        SELTYPE_NONE,       // 選択しない、必要がない
        SELTYPE_STATIC,     // 常に選択されている
        SELTYPE_CLICK,      // クリックすると選択される
        SELTYPE_TACH,       // マウスで触れると選択される
        SELTYPE_BUTTON,     // クリックすると実行、選択なし
    };
    int seltype;
    
    CString caption;        // 文字列
    
    // 値指定形式
    enum { NUMTYPE_NONE, NUMTYPE_NUMBER };
    int numtype;
    
    // 値を指定する種類
    int numvalue_num;
    enum { NUMVALUE_NUM = 16 };
    int numvalue[ NUMVALUE_NUM ];
    
    // ボタンが押されたときのコールバック
    virtual void OnButton( int x, int y ) { x = x; y = y; };
    
    // 表示するべき文字列の生成
    CString GetMenuString();
    
    // 表示処理
    void Draw( CDC& dc );
};

{magclick}
/*========================================================*/
 さいごに
/*========================================================*/

 こんな感じで、今度こそ楽にできるでしょうか。

{magclick}
/*========================================================*/
 次回予告
/*========================================================*/

 次回は9月30日(金曜日)に、第607回をお送りします。
 お題は「ブレゼンハムのアルゴリズム」

 円の描画の処理について。

 お楽しみに!

/*========================================================*/
 最後の決り文句
/*========================================================*/
 このメールマガジンは、まぐまぐさんから発行しています。
 このメールマガジンを解除したい場合は、まぐまぐさんをご利用
ください。このメルマガのまぐまぐアイディーは最後にあります。
 このメールマガジンには広告が挿入されていますか?
 このメールマガジンの内容に文面の引用はありませんか?
 めーらっくすの場合はめーらっくすの利用方に従ってください。
 このメールマガジンの内容の、転用、流用、宣伝、リンク、
100万回ですから! なんて大歓迎です。

{magclick}
/*========================================================*/
 
/*========================================================*/

発行者 あゆしゃ

ホームページ::あゆしゃの世界
http://ayusya.hp.infoseek.co.jp/

ご意見・ご感想・ご質問メール
mailto:ayusya@flamenco.plala.or.jp

まぐまぐ::アイディー
0000020674

まぐまぐ::登録と解除
http://www.mag2.com/m/0000020674.htm

まぐまぐ::バックナンバー
http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674

めーらっくす::アイディー
MM3E1AEE285AB4F

めーらっくす::登録と解除
http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F

めーらっくす::バックナンバー★最近のものならこちらが便利★
http://www.mailux.com/mm_bno_list.php?mm_id=MM3E1AEE285AB4F

ブラウザの閉じるボタンで閉じてください。