2011-09-11 2 views
1

대화 상자 기반 MFC 응용 프로그램이 있습니다. 내 대화 상자에는 메뉴가 있으며 대화 상자에서 메뉴 단축키를 사용하려면 here 기술을 사용하고 있습니다.대화 상자의 메뉴 명령 업데이트 처리기

잘 작동하지만 메뉴 명령 업데이트 처리기를 구현하는 방법을 찾지 못하는 것 같습니다. 또는 업데이트 처리기를 구현했지만 MFC에서 호출하도록하는 좋은 방법을 찾지 못하는 것 같습니다.

웹을 검색하면서 대화 하위 컨트롤에 대한 명령 업데이트 처리기를 구현하는 UpdateDialogControls()과 같은 기능을 발견했습니다. 하지만 대화 상자 메뉴의 명령에 대해이 작업을 수행하려고합니다.

제안 사항?

답변

4

나는이 작업을했습니다.

처음에는 WM_KICKIDLE이 유망 해 보였으 나 (유휴 모드로 전환 할 때이 메시지를 대화 상자로 보내면) 결국 Update Command UI Handlers Do Not Work for Menu Attached to a Dialog Box 문서에 설명 된 기술을 적용했습니다.

이 문서에서는 OnInitMenuPopup()을 처리 한 다음 CMainFrame에서 처리기로 코드를 복사하는 방법을 보여줍니다.

여기 MS가 대화 상자에 대해 더 나은 지원을 제공하지 않는 이유가 확실하지 않습니다. 그러나 나는 내 목적을 위해 일하고있다.

+0

그 이유는 대화 상자에 메뉴 나 메뉴 액셀러레이터가 없기 때문입니다. 원래 문제에 대한 '진짜'대답은 '대화 상자에 메뉴를 넣지 마십시오'였습니다. Windows 방식이 아닙니다. – Roel

+0

@Roel : 나는 더 이상 동의 할 수 없었다. MFC 자체는 대화 상자 기반 응용 프로그램의 아이디어를 지원합니다. 대개 대화 상자에 메뉴를 넣는 것은 의미가 없습니다. 그러나 때로는 그렇습니다. –

+0

MFC 대화 상자 기반 응용 프로그램은 메뉴가없는 간단한 대화 상자이거나 '폼'(즉, 대화 상자)을 기반으로하는보기가있는 SDI 응용 프로그램입니다. 그러나이 경우 대화 상자는 메뉴 또는 가속기를 처리하지 않으므로 프레임 창 (CMainFrame)이 수행합니다. 대화 상자에 메뉴를 넣는 방법에 대한 정보를 쉽게 찾을 수없는 이유가 있습니다. PreTranslateMessage()를 사용해야하는 시간의 95 %는 MFC가 아니거나 Windows 방식이 아닌 잘못된 것을 수행하기 때문입니다. – Roel

0

저는 MFC에별로 관심이 없습니다. 평범한 win32로 작업했는데, 이것은 The ON_UPDATE_COMMAND_UI Macro처럼 보입니다. 왼쪽 네비게이션 메뉴를 보면 "Update Handlers When Called"항목을 찾을 수 있습니다.

그리고 어디에서나 메뉴를 사용하여 실제로 대화 상자에 핸들을 전달하는 창에 핸들을 전달해야합니다 (예 : 자습서의 목록 3).

+0

예, 'ON_UPDATE_COMMAND_UI()'매크로가 정의되어 있습니다. 그러나 MFC 대화 상자에서 자동으로 사용하지 않습니다. –