MFC VC++ アプリケーション Tip集 サイト


4章.CMenuクラス メニュー

4−5.不定個のアイテムを追加して処理する(ID_の有効範囲)



 あらかじめIDを設定しといて、それを使用するという方法があります。
 その場合はMFC Class Wizardで関数をつくるなり、ON_COMMAND_RANGEで処理したりします。

 ヘルプ(MSDN)の「テクニカル ノート 20: ID 名および番号に関する規約」によると「0x8000 -> 0xDFFF」と定まっていますので、それを利用すると以下のようなことができるかと思います。
 ここでは、最後の方は使われてないものとし、0〜99のアイテムと考えます。

void CTest0038View::OnButton55() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
	int i;
	POINT pt;
	CMenu cme;
	char buf[256];

	GetCursorPos(&pt);
	cme.CreatePopupMenu();
	for(i=0;i<10;++i)
	{
		sprintf(buf,"item%d",i);
		cme.AppendMenu(MF_STRING|MF_BYCOMMAND,0xDFFF-i,buf);
	}
	cme.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,pt.x,pt.y,this);
}

BOOL CTest0038View::OnCommand(WPARAM wParam, LPARAM lParam) 
{
	// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
	int i;

	if((i=0xDFFF-LOWORD(wParam))<100) TRACE("item%d\n",i);
	
	return CFormView::OnCommand(wParam, lParam);
}





Top へ戻る