MFCサンプル:Collectについて

[戻る]
cc 2010/05/12(水) 15:29:37
いつもお世話になっています、ccです。

MFCサンプル:Collectを見ています、
幾つかのわかりにくい所があります。
1.Viewの変更メニュー(Example)の使い方
    ON_COMMAND_RANGE(ID_STRINGLIST, ID_MAP, OnExample)
普段、インベトハンドラの追加を通じてやってますが、
ここで、そうではない。
手動でやっていますか。

2.自分でメニューを追加したのですが、(”自作View”、 ID_View1)
以下の通りです。
void CMainFrame::OnExample(UINT nCmdID)
{
…
    CRuntimeClass* pNewViewClass;
    switch (nCmdID)
    {
        case ID_STRINGLIST:
            pNewViewClass = RUNTIME_CLASS(CStringListView);
            break;
        case ID_TYPEDLIST:
            pNewViewClass = RUNTIME_CLASS(CTypedPtrListView);
            break;
…
              //追加したID
        case ID_View1:
            pNewViewClass = RUNTIME_CLASS(CTypedPtrListView);
            break;
        default:
            ASSERT(0);
            return;
    }
結局、ID_View1は有効していなかった。(”自作View”の色がグレになった。)

どうやったら、有効になるのでしょうか。
(言い換えるとID_STRINGLISTはどういうふうに有効になったか)

よろしくお願いします。

環境:XP .Net2002 MFC

仲澤@失業者 2010/05/12(水) 15:36:39
ON_COMMAND_RANGE(ID_STRINGLIST, ID_MAP, OnExample)

は、IDがID_STRINGLIST以上で、かつID_MAP以下ならOnExample()を
実行という意味です。
従って「ID_View1」の値が上記の範囲でないとメニューは有効になりません。

Blue 2010/05/12(水) 15:38:09
ID_STRINGLISTからID_MAPは値が連番になっていますか?

cc 2010/05/12(水) 16:06:55
仲澤@失業者さん、Blueさん
ご回答ありがとう。

>従って「ID_View1」の値が上記の範囲でないとメニューは有効になりません。
なるほど、やってみたらその通りです。
ON_COMMAND_RANGE(ID_STRINGLIST, ID_View1, OnExample)
、”自作View”は有効になりました。

どうもありがとうございました。

cc 2010/05/12(水) 16:07:48
[[解決]]
解決チェックが忘れた。

maru 2010/05/17(月) 12:00:56
質問に対する答えは全てヘルプやMSDNに書いてあるのに
http://msdn.microsoft.com/ja-jp/library/9ab3z9tb(VS.80).aspx
ON_COMMAND_RANGEで検索すれば一発で引っかかるけど。

> 普段、インベトハンドラの追加を通じてやってますが、
> ここで、そうではない。
> 手動でやっていますか。
「メッセージ マップの範囲の自動サポートはないので、ユーザー自身がこのマクロを記
述する必要があります。」

> どうやったら、有効になるのでしょうか。
> (言い換えるとID_STRINGLISTはどういうふうに有効になったか)
「ある範囲のコマンド ID を 1 つのメンバ関数に割り当てるには ON_COMMAND_RANGE を
使用します。1 つのコマンドを 1 つのメンバ関数に割り当てるには ON_COMMAND を使用
します。メッセージ マップのエントリに一致するコマンド ID は 1 つだけです。つま
り、コマンドを複数のハンドラに割り当てることはできません。メッセージ マップ範囲
の詳細については、「範囲内のメッセージのハンドラ」を参照してください。」

> なるほど、やってみたらその通りです。
質問や、やってみる前に検索することを強くお勧めします。

cc 2010/05/17(月) 15:03:21
maruさん
ご指摘ありがとう。

>質問や、やってみる前に検索することを強くお勧めします。
当時、検索のほうがうまくできませんでした。
アトバイス得てから、検索ができました。
ご指摘ありがとう。

古いスレッドには追加発言できません。