본문 바로가기
C & C++/MFC 컨트롤

[Dialog / 메뉴] 대화상자에서 메뉴 on/off 시키기

by izen8 2011. 12. 14.
반응형

대화상자에서 메뉴를 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;
}

반응형

댓글