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


4章.CMenuクラス メニュー

4−1.連続したリソースIDを1つのメッセージマップにて処理



// 連続したリソースIDを1つのメッセージマップにて処理
// メニュー等でサブアイテムの項目なら、
// 1つのメソッドで全てを管理する事が出来ます。
【条件】
// Resource.hで連続したID値になっている事。
IDC_SET1  1001
IDC_SET2  1002
IDC_SET3  1003
IDC_SET4  1004
IDC_SET5  1005
IDC_SET6  1006
IDC_SET7  1007
IDC_SET8  1008
IDC_SET9  1009
IDC_SET10 1010

【作成方法】
// hファイル
// メソッドの定義をします。
	void OnSet(UINT id);   
// cppファイル
	BEGIN_MESSAGE_MAP(CHaseiDlg, CDialog)
// に以下のコードを入力します。
	ON_COMMAND_RANGE(IDC_SET1,IDC_SET10,OnSet)// IDC_SET1〜IDS_SET20までのIDを取得
	ON_UPDATE_COMMAND_UI_RANGE(IDC_SET1, IDC_SET10, OnUpdateSet)
// 実際のメソッド内の処理は以下の通りです。
void CHaseiDlg::OnSet(UINT id)
{
 // switch文で別々の処理が行えます。
	switch( nID )
	{
	case IDC_SET1:
		break;
	case IDC_SET2:
		break;
	case IDC_SET10:
		break;
	default:
		return;
	}
}
// アップデートメソッド
void CMainFrame::OnUpdateSpicSize(CCmdUI* pCmdUI)
{
#if 1 // パターン1
	BOOL bCheck = FALSE;
	BOOL bEnable = FALSE;
	switch( pCmdUI->m_nID )
	{
	case IDC_SET1:
		bCheck = TRUE;
		bEnable = TRUE;
		break;
	case IDC_SET2:
		break;
	case IDC_SET10:
		break;
	default:
		break;
	}
	pCmdUI->SetCheck(bCheck);
	UINT nEnable;
	if( bEnable ){
		nEnable = MF_ENABLED | MF_BYPOSITION;
	}else{
		nEnable = MF_GRAYED | MF_BYPOSITION;
	}
	if( pCmdUI->m_pSubMenu ){
		pCmdUI->m_pMenu->EnableMenuItem( pCmdUI->m_nIndex , nEnable );
	}
#else // パターン2
	pCmdUI->SetCheck( (UINT)(IDC_SET1 + nColor) == pCmdUI->m_nID );
#endif
 
}


Top へ戻る