// 連続したリソース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
}