同一種類の複数のメッセージイベントを一つまとめる方法
ON_UPDATE_COMMAND_UI編
// 生成されたメッセージ マップ関数
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnCheckNG();
afx_msg void OnCheckOK();
afx_msg void OnAckNakNothiing();
afx_msg void OnAckSend();
afx_msg void OnNakSend();
afx_msg void OnAckNakMsg();
afx_msg void OnCheckNo();
afx_msg void OnHealth();
//}}AFX_MSG
// メニュー用のコントロールレンジを追加
afx_msg void OnMenuUpDate(CCmdUI* pCmdUI);
DECLARE_MESSAGE_MAP()
};
まずは、クラスウィザードからON_UPDATE_COMMAND_UIの関数を全て削除します。
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(Menu_CheckNG, OnCheckNG)
ON_COMMAND(Menu_CheckOK, OnCheckOK)
ON_COMMAND(Menu_AckNakNothiing, OnAckNakNothiing)
ON_COMMAND(Menu_AckSend, OnAckSend)
ON_COMMAND(Menu_NakSend, OnNakSend)
ON_COMMAND(Menu_AckNakMsg, OnAckNakMsg)
ON_COMMAND(Menu_CheckNo, OnCheckNo)
ON_COMMAND(Menu_Health, OnHealth)
//}}AFX_MSG_MAP
// メニュー用のコントロールレンジを追加 ON_UPDATE_COMMAND_UI_RANGE( Menu_CheckNG, Menu_Conf, OnMenuUpDate )
END_MESSAGE_MAP()次にMainFrm.cppのメッセージマップを書き替えます。
#define IDC_FLOWCTRL 1032 #define Bo_QuickDump 1033 #define Menu_CheckNG 32773 #define Menu_CheckOK 32774 #define Menu_AckSend 32776 #define Menu_NakSend 32777 #define Menu_AckNakNothiing 32778 #define Menu_AckNakMsg 32779 #define Menu_CheckNo 32780 #define Menu_Health 32781 #define Menu_Conf 32782 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 140 #define _APS_NEXT_COMMAND_VALUE 32783 #define _APS_NEXT_CONTROL_VALUE 1034 #define _APS_NEXT_SYMED_VALUE 101 #endif #endifそれでも分からないという人は、C言語の勉強からやり直した方がいいでしょう。
void CMainFrame::OnMenuUpDate(CCmdUI* pCmdUI)
{
switch( pCmdUI->m_nID )
{
case Menu_CheckNG:
// チェックサムNGのチェック状態を更新する
if( E_CheckSumOK == D_CHECKSUM_NG )
{
pCmdUI->SetCheck( 1 );
}
else
{
pCmdUI->SetCheck( 0 );
}
// チェックサムNGを選択可能状態にする
pCmdUI->Enable(TRUE);
break;
case Menu_CheckOK:
後は、関数本体を作成して、内容は元のON_UPDATE_COMMAND_UI_RANGEイベントでの処理を
使えば完了です。