대화상자에서 메뉴를 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;
}
'C & C++ > MFC 컨트롤' 카테고리의 다른 글
[Dialog] 대화상자를 부모 윈도우 정 중앙에 위치시키기 (0) | 2011.12.14 |
---|---|
[Dialog] 자식 윈도우 일괄 재배치하는 방법 (0) | 2011.12.14 |
[Dialog] 윈도우 그리기 lock 하기 (0) | 2011.12.14 |
[Dialog] 캡션이나 아이콘을 깜박이게 하는 FlashWindow (0) | 2011.12.14 |
[Dialog] 자동 사이즈 다이얼로그 (0) | 2011.12.14 |
댓글