2009/02/11 10:17 |
■ CCmdUI 클래스
。기능
- 사용자 인터페이스 갱신과 관련된 기능을 수행하며 ON_UPDATE_COMMAND_UI 매크로로 연결되는 이벤트 처리기에 사용한다.
- 연결된 이벤트 처리기는 ON_COMMAND로 이미 등록되어 있는 이벤트 상태에 변경이 있을 때 이를 업데이트 시킨다.
- 연결된 이벤트 처리기는 이 클래스의 인스턴스 포인터를 매개변수로 넘겨받는다.
- 이벤트명이 ID_BEGIN이라면 이를 갱신하는 이벤트 처리기는 OnUpdateBegin()이 된다.
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) . . . ON_UPDATE_COMMAND_UI( ID_BEGIN, OnUpdateBegin) ON_UPDATE_COMMAND_UI( ID_END, OnUpdateEnd) END_MESSAGE_MAP()
void CCmdUIView::OnUpdateBegin(CCmdUI *pCmdUI) { pCmdUI->Enable(!m_bStart) ; } void CCmdUIView::OnUpdateEnd(CCmdUI *pCmdUI) { pCmdUI->Enable(!m_bStart) ; } |
。주요 멤버변수 : 갱신할 사용자 인터페이스의 이벤트 ID를 나타내는 UNIT 형의 m_nID가 있다.
。주요 멤버 함수
멤버 함수 | 기능 |
Enable | BOOL형 매개변수를 받아 사용자 인터페이스를 활성화/비활성화 시킴. |
SetText | 사용자 인터페이스의 텍스트를 변경시킴. |
SetCheck | int형 매개변수를 받아 체크 표시를 하거나 없앰. |
SetRadio | SetCheck 함수와 비슷한 기능. 단, 체크 표시대신 점이 찍힘. |
------------------------------------------------------------------------------------------
- 우선 다음과 같은 이벤트 처리기가 정의되어 있다고 가정한다.
BEGIN_ MESSAGE_MAP(CCmdUIView, CView) ... ON_COMMNAD( ID_BEGIN, OnBegin ) ON_COMMAND( ID_END, OnEnd ) END_MESSAGe_MAP()
void CCmdUIView::OnBegin() { m_bStart = TRUE ; }
void CCmdUIView::OnEnd() { m_bStart = FALSE ; } |
■ Enable 함수
- 메뉴 항목을 상황에 다라 활성화 시키거나 비활성화 시킨다.
。상태변수 만들기
- 활성화인지 비활성화 인지의 상황을 기억하는 상태 변수가 필요하다.
class CCmdUIView : public CView { ... BOOL m_bStart ; } |
- 상태 변수를 클래스 생성자 함수에서 초기화 해 준다.
CCmdUIView::CCmdUIView() { ... m_bStart = FALSE ; } |
。사용자 인터페이스 갱신 메세지 처리기 등록
- ON_UPDATE_COMMAND_UI로 등록한다.
BEGIN_ MESSAGE_MAP(CCmdUIView, CView) ... ON_UPDATE_COMMNAD_UI( ID_BEGIN, OnBegin ) ON_UPDATE_COMMNAD_UI( ID_END, OnEnd ) END_MESSAGe_MAP() |
。메세지 처리기 활성/비활성 상태 제어
- Enable 함수를 호출하여 매개변수로 TRUE(활성화) 또는 FLASE(비활성화)를 넘긴다.
- 이벤트 처리기에 넘겨지는 매객변수 pCmdUI에는 메뉴 항목에 대한 정보가 담겨 있다.
- CCmdUI 클래스의 멤버 함수들을 호출하면 해당 메뉴 항목을 제어할 수 있다.
void CCmdUIView::OnUpdateBegin(CCmdUI *pCmdUI) { pCmdUI->Enable(!m_bStart) ; } void CCmdUIView::OnUpdateEnd(CCmdUI *pCmdUI) { pCmdUI->Enable(!m_bStart) ; } |
'프로그래밍(Programming) > MFC&API' 카테고리의 다른 글
더블버퍼링 (0) | 2012.11.01 |
---|---|
CString 을 float 로 변환 (0) | 2012.11.01 |
EditBox 가 CString 일때 비활성화(회색으로) 시키기 (0) | 2012.11.01 |
UpdateData 함수 (0) | 2012.11.01 |
스크롤바 기능, 사용하기 (0) | 2012.11.01 |