[Dialog / 메뉴] 대화상자에서 메뉴 on/off 시키기
대화상자에서 메뉴를 on/off 시키기 위해서는 WM_KICKIDLE 메세지를 처리하여 주어야 한다.
1. 대화상자 해더 파일에 아래의 이벤트 메소드를 선언한다.
#include <afxpriv.h>
afx_msg LRESULT OnKickIdle(WPARAM wParam, LPARAM lParam);
2. 대화상자 메세지 맵에 메세지 처리를 추가한다.
ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
3. 대화상자 소스 코드에 아래의 메소드를 추가한다.
/** 대화상자 기반 윈도우에서 메뉴의 ON/OFF 를 처리할 수 있는 코드 */
LRESULT CTestMenuDlg::OnKickIdle(WPARAM wParam, LPARAM lParam)
{
UpdateDialogControls(this, FALSE);
CMenu *pMainMenu = GetMenu();
CCmdUI cmdUI;
UINT n;
for( n = 0; n < pMainMenu->GetMenuItemCount(); ++n )
{
CMenu* pSubMenu = pMainMenu->GetSubMenu(n);
cmdUI.m_nIndexMax = pSubMenu->GetMenuItemCount();
for( UINT i = 0; i < cmdUI.m_nIndexMax; ++i )
{
cmdUI.m_nIndex = i;
cmdUI.m_nID = pSubMenu->GetMenuItemID(i);
cmdUI.m_pMenu = pSubMenu;
cmdUI.DoUpdate( this, FALSE );
}
}
// 팝업 메뉴도 처리하고 싶으면 아래와 같이 하면 된다.
// for( n = 0; n < m_clsPopupMenu.GetMenuItemCount(); ++n )
//{
// CMenu* pSubMenu = m_clsPopupMenu.GetSubMenu(n);
// cmdUI.m_nIndexMax = pSubMenu->GetMenuItemCount();
// for( UINT i = 0; i < cmdUI.m_nIndexMax; ++i )
// {
// cmdUI.m_nIndex = i;
// cmdUI.m_nID = pSubMenu->GetMenuItemID(i);
// cmdUI.m_pMenu = pSubMenu;
// cmdUI.DoUpdate( this, FALSE );
// }
//}
return 0;
}