본문 바로가기
코딩취미/C,C++

[MFC] CCmdUI 의 특징과 기능

by 브링블링 2023. 12. 13.
728x90

CCmdUI 특징과 기능

CCmdUI는 MFC(Microsoft Foundation Classes) 라이브러리에서 제공되는 클래스 중 하나로, 메뉴 및 툴바 항목과 연결된 명령 상태(Command User Interface) 정보를 관리하는 데 사용됩니다. MFC는 주로 Windows 기반 응용 프로그램을 개발하기 위한 Microsoft의 C++ 라이브러리입니다.

CCmdUI 클래스의 주요 특징 및 기능은 다음과 같습니다:

  1. 명령 상태 관리:
    • CCmdUI는 주로 명령 상태를 관리하는 데 사용됩니다. 명령 상태란 메뉴 항목 또는 툴바 버튼이 활성화, 비활성화, 선택된 상태 등 어떤 상태에 있는지를 나타냅니다.
    • 예를 들어, 특정 조건에서 메뉴 항목이나 툴바 버튼을 비활성화하고 싶을 때 CCmdUI를 사용하여 그 상태를 관리할 수 있습니다.
  2. OnUpdate 함수와의 연동:
    • CCmdUI 객체는 주로 OnUpdate 멤버 함수와 연동됩니다. OnUpdate 함수는 주기적으로 호출되어 명령 상태를 업데이트합니다.
    • OnUpdate 함수 내에서 CCmdUI를 사용하여 명령 상태를 설정하고, 해당 상태에 따라 메뉴나 툴바 항목이 업데이트됩니다.
  3. Enable, SetCheck, SetRadio, SetText 등의 멤버 함수:
    • CCmdUI 클래스는 다양한 멤버 함수를 제공하여 명령 상태를 설정할 수 있습니다. 몇 가지 주요 함수는 다음과 같습니다:
      • Enable(BOOL bOn): 명령을 활성화 또는 비활성화합니다.
      • SetCheck(int nCheck): 체크 상태를 설정합니다.
      • SetRadio(BOOL bOn): 라디오 상태를 설정합니다.
      • SetText(LPCTSTR lpszText): 텍스트를 설정합니다.
  4. CmdUI 구조체와의 사용:
    • CCmdUI는 일반적으로 ON_UPDATE_COMMAND_UI 매크로와 함께 사용됩니다. 이 매크로는 ON_COMMAND 또는 ON_UPDATE_COMMAND_UI를 통해 명령 핸들러와 연결될 때 호출되어 CCmdUI 객체를 생성하고 초기화합니다.

 

아래는 간단한 CCmdUI 사용 예시입니다.  이렇게 설정된 CCmdUI 객체는 연결된 메뉴 항목이나 툴바 버튼에 반영되어 사용자에게 표시됩니다.

void CMyView::OnUpdateMyCommand(CCmdUI* pCmdUI) {
    // 어떤 조건에 따라 명령 상태를 설정
    pCmdUI->Enable(TRUE);   // 활성화
    pCmdUI->SetCheck(FALSE); // 체크 해제
    pCmdUI->SetText(_T("New Text")); // 텍스트 설정
}
728x90

CCmdUI 클래스 내용

class CCmdUI        // simple helper class
{
public:
// Attributes
	UINT m_nID;
	UINT m_nIndex;          // menu item or other index

	// if a menu item
	CMenu* m_pMenu;         // NULL if not a menu
	CMenu* m_pSubMenu;      // sub containing menu item
							// if a popup sub menu - ID is for first in popup

	// if from some other window
	CWnd* m_pOther;         // NULL if a menu or not a CWnd

// Operations to do in ON_UPDATE_COMMAND_UI
	virtual void Enable(BOOL bOn = TRUE);
	virtual void SetCheck(int nCheck = 1);   // 0, 1 or 2 (indeterminate)
	virtual void SetRadio(BOOL bOn = TRUE);
	virtual void SetText(LPCTSTR lpszText);

// Advanced operation
	void ContinueRouting();

// Implementation
	CCmdUI();
	BOOL m_bEnableChanged;
	BOOL m_bContinueRouting;
	UINT m_nIndexMax;       // last + 1 for iterating m_nIndex

	CMenu* m_pParentMenu;   // NULL if parent menu not easily determined
							//  (probably a secondary popup menu)

	BOOL DoUpdate(CCmdTarget* pTarget, BOOL bDisableIfNoHndler);
};

 

관련호출 예제

728x90