2012-07-19 2 views
1

CPropertySheet와 독립 실행 형 대화 상자 모두에 표시해야하는 대화 상자가 있습니다. 나는 코드 중복성을 피하기 위해 2 개의 분리 된 클래스를 가지지 않기로 결정했다. (나는이 대화 상자에서 많은 것을 변경하고, 2 개의 클래스를 지속적으로 동기화하는 것은 지옥이 될 것이다.) 대신 독립형 대화 상자로 보여주기를 원한다. CPropertyPage :: DoModal를 호출하십시오. 이것은 몇 가지 문제를 일으키지 만, 나는 대부분을 고쳤습니다.독립 실행 형 대화 상자로 표시 할 때 CPropertyPage 파생 대화 상자가 Esc에서 닫히지 않습니다.

그러나 일부는 여전히 남아 있습니다. 즉, enter와 esc는 작동하지 않습니다. 또한 탭을 눌러도 포커스가 변경되지 않습니다. 이 CPropertyPage 모든 키보드 입력 먹는 생각하거나 어쩌면 부모에게 전달하려고합니다.

독립 실행 형 모드에서 어떻게 동작을 재정의 할 수 있습니까?

답변

0

나는 이것이 당신을 위해 일할 것이라고 믿습니다. 나는 이것으로 모든 것을 메모리에서 수행 할 수있는 대화 상자를 가지고 있지 않지만, DoModal을 호출하거나 사용자가 DoModal을 호출하기 전에 설정 한 속성으로 공개 할 때 bool을 추가 할 수 있다고 생각한다. 그것은 독립 실행 형 대화로 실행 나타 내기 위해, 다음과 같은 PreTranslateMessage를 오버라이드 (override) : 나는를 CPropertyPage :: PreTranslateMessage``의 소스 코드를 보았을 때 당신은 또한 http://support.microsoft.com/kb/125645

+0

도움이 링크를 찾을 수 있습니다

CMyPropertyPage::PreTranslateMessage(MSG* pMsg) { if (m_runningAsStandalone && pMsg->message == WM_KEYDOWN) { UINT key = pMsg->wParam; switch(pMsg->wParam) { case VK_RETURN: OnOK(); return TRUE; case VK_ESCAPE: OnClose(); return TRUE; } } return CPropertyPage::PreTranslateMessage(pMsg); } 

, 그것은 단지'CWnd :: PreTranslateMessage'를 호출하는 것으로 밝혀졌습니다. 그래서 나는'CDialog :: PreTranslateMessage'를 호출 해 보았습니다. 그리고 기적적인 일이 시작되었습니다. 탭 키와 모든 것을 포함합니다. – sashoalm

관련 문제