2014-05-19 6 views
0

내 프로그램/환경 ... VS2010, C++, MFC100, CWinAppEx, CMDIFrameWndEx. MFC 기능 팩CPreviewView 및 명령 처리기

저는 CPreviewView 미분을 만들고 처리하고 있습니다. 내 메서드는이 미리보기를 사용자가 유지하고 활성화 할 수있는 일반보기로 취급합니다. 기본 PreviewView는 현재 뷰를 페인트하고 하위 프레임을 '인계'합니다.

내가 알아낼 수없는 한 가지는 모든 CDocuments로 이동해야하는 ON_UPDATE_COMMAND_UI 메시지 맵을 제어하는 ​​방법입니다. CPreviewView가 만들어지면 어떻게 든 모든 명령 처리기를 CDocuments로 비활성화합니다. CViews에 대한 명령 처리기가 아직 작동 중입니다.

내 MDI 앱에서 열려있는 모든 문서가 ON_UPDATE_COMMAND_UI 메시지를받지 못합니다. 이 메시지 핸들러를 View 나 Frame으로 옮길 수는 있지만 너무 효율적으로 그렇게 할 수는 없습니다.

누구든지 CPreviewView 클래스에서 문서 처리기를 끄는 위치를 알고 있습니까?

+0

'CView :: OnCmdMsg (...)'에 중단 점을 넣고 논리에 따라 문서 메시지 맵이 무시되는 이유를 확인하십시오. – user1793036

+0

이것은 정말 도움이되었습니다. 내 명령이 MyDoc :: OnCmdMsg()에서 내 프로그램에 의해 바닥에 버려진 것을 보았습니다. 감사! – diox8tony

답변

2

우선 MFC는 "잠긴"프레임 워크가 아닙니다. 그 전체 소스는 "Visual Studio 폴더"\ VC \ atlmfc \ src \ mfc \ (내 PC에 : c : \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC에있는 자신의 PC에 있습니다. \ atlmfc \ src \ mfc) CPreviewView의 소스는 viewprev.cpp 파일입니다. 난 그냥 파일을 열고 DoPrintPreview에 그들은이 호출됩니다

pParent->OnSetPreviewMode(TRUE, pState); // Take over Frame Window 

MSDN이 방법에 따르면 : 기본 구현은 모든 표준 도구 모음을 사용하지 않도록 설정하고 메인 메뉴와 메인 클라이언트 창을 숨 깁니다

. 그러면 MDI 프레임 창이 임시 SDI 프레임 창으로 바뀝니다.

winfrm.cpp이라는 파일을 열고이 방법이 작동하는지 확인하고 모든 메뉴를 비활성화합니다. 분명히 미리보기 모드가 설정되어있는 동안에는 업데이트 메시지가 문서로 보내지지 않습니다.

인쇄 미리보기 동안 숨어 및 제어 바, 다른 프레임 창 부품의 전시를 사용자 정의 :

위의 하이퍼 링크에서 MSDN 기사는 당신이 당신의 프레임에 대한 OnSetPreviewMode 메소드를 오버라이드 (override) 할 필요가 있다고 말한다. 오버라이드 된 버전 내에서 기본 클래스 구현을 호출하십시오.

이것은 문제가되지 않습니다.

+0

예, OnSetPreviewMode() 함수 호출을 주석 처리하여이 질문에 대한 최상의 대답입니다. 이미이 작업을 수행했지만 미리보기 창이 열리면 MyDoc :: OnCmdMsg가 자체 코드를 사용하지 못하게했습니다. – diox8tony

+0

BTW, MFC 라이브러리의 코드를 주석으로 처리하지 않는 것이 좋습니다. 그것은 올바른 방법이 아닙니다. 대신 클래스의 메서드를 재정의하고 정확히 – cha

+0

으로 도구 모음을 구성해야합니다. 상속 된 클래스가 있고 함수를 오버로드 한 다음 클래스의 코드를 편집합니다. – diox8tony