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 へ戻る |