문제
사용자가 확인/선택 취소 할 수있는 체크 마크처럼 작동하는 메뉴 항목을 추가하려고하며 다른 클래스는 해당 메뉴 항목의 체크 마크 상태를 볼 수 있습니다. 메뉴 옵션 (팝업 옵션 포함)을위한 클래스를 만드는 제안을 받았지만 Visual Studio 2005의 리소스 레이아웃 편집기에있을 때 메뉴 옵션을위한 클래스를 만들 수 없습니다. 내가 설명한 것을 수행 할 수있는 메뉴 항목을 만드는 가장 쉬운 방법에 대한 제안을 듣습니다.
해결책 3
getMenu () 메소드를 사용하여 메인 프레임에서 메뉴를 검색 한 다음 해당 메뉴 객체와 ID 번호를 사용하여 getMenustate () 함수뿐만 아니라 올바른 플래그로 CheckMenuitem ()을 호출했습니다.
다른 팁
당신은 사용해야합니다 CCmdUI::SetCheck
기능을 통해 메뉴 항목에 확인란을 추가 할 수 있습니다. ON_UPDATE_COMMAND_UI
핸들러 기능 및 ON_COMMAND
핸들러 확인란의 상태를 변경합니다. 이 방법은 응용 프로그램의 기본 메뉴와 생성 할 팝업 메뉴 모두에 대해 작동합니다.
MDI 또는 SDI MFC 응용 프로그램이 있다고 가정하면 먼저 응용 프로그램, 메인 프레임, 문서 또는 뷰 클래스에서 핸들러 기능을 추가 할 위치를 결정해야합니다. 이것은 플래그의 사용에 따라 다릅니다. 응용 프로그램 전체의 동작을 제어하면 응용 프로그램 클래스에 넣으십시오. 보기 별 동작을 제어하면보기 클래스에 넣습니다.
(또한 메뉴 항목을 떠나는 것이 좋습니다. 확인 리소스 편집기의 속성이 설정되었습니다 거짓.)
다음은보기 클래스를 사용하여 ID_MY_COMMAND
메뉴 아이템:
// MyView.h
class CMyView : public CView
{
private:
BOOL m_Flag;
afx_msg void OnMyCommand();
afx_msg void OnUpdateMyCommand(CCmdUI* pCmdUI);
DECLARE_MESSAGE_MAP()
};
// MyView.cpp
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_MY_COMMAND, OnMyCommand)
ON_UPDATE_COMMAND_UI(ID_MY_COMMAND, OnUpdateMyCommand)
END_MESSAGE_MAP()
void CMyView::OnMyCommand()
{
m_Flag = !m_Flag; // Toggle the flag
// Use the new flag value.
}
void CMyView::OnUpdateMyCommand(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_Flag);
}
당신은 보장해야합니다 m_Flag
예를 들어, 멤버 변수는 CMyView
생성자 또는 OnInitialUpdate
기능.
이게 도움이 되길 바란다!
@Chrisn의 접근 방식은 효과가 없습니다 MFC 대화 상자 응용 프로그램 (그만큼 pCmdUI->SetCheck(m_Flag);
효과가 없습니다). 다음은 대화 상자 앱을위한 솔루션입니다.
// MyView.h
class CMyView : public CView
{
private:
BOOL m_Flag;
CMenu * m_menu;
virtual BOOL OnInitDialog();
afx_msg void OnMyCommand();
DECLARE_MESSAGE_MAP()
};
// MyView.cpp
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_MY_COMMAND, OnMyCommand)
END_MESSAGE_MAP()
BOOL CMyView::OnInitDialog()
{
m_menu = GetMenu();
}
void CMyView::OnMyCommand()
{
m_Flag = !m_Flag; // Toggle the flag
if (m_flag) {
m_menu->CheckMenuItem(ID_MENUITEM, MF_CHECKED | MF_BYCOMMAND);
} else {
m_menu->CheckMenuItem(ID_MENUITEM, MF_UNCHECKED | MF_BYCOMMAND);
}
}
참조 :