2014-07-08 2 views
0

내 응용 프로그램은 dll로 제공되는 대화 상자입니다. 내가 제어 할 수없는 더 큰 응용 프로그램에서 모달 및 모덜리스 모드로 시작할 수 있습니다. 우리는 MFC 라이브러리를 사용하고 COM 아키텍처를 따릅니다. 개발을 위해 대화 상자를 시작하는 테스터 응용 프로그램이 있습니다.COM 프레임 워크의 MFC 응용 프로그램에서 Tab 키가 작동하지 않습니다. 그러나 화살표 키는 작동합니다.

제가 직면 한 문제는 탭 키가 모달과 모덜리스에서 전혀 작동하지 않는다는 것입니다. 하지만 화살표 키가 작동합니다.

SPY ++를 통해 관찰 할 때 탭이 전혀 표시되지 않습니다.

나는 무슨 일이 일어나고 있는지 꽤 혼란 스럽다.

+0

컨트롤에 모두 'WS_TABSTOP' 속성이 있습니까? –

+0

네, 모두 그렇습니다. –

답변

1

탭이 모덜리스 대화 상자에서 작동하려면 응용 프로그램이 기본 메시지 펌프에서 IsDialogMessage을 호출해야합니다. 그러나 귀하의 경우에는 응용 프로그램이 대화 상자가 있는지조차 알지 못합니다. 유일한 옵션은 Windows 후크 (SetWindowsHookEx 참조)를 설치하고 IsDialogMessage으로 전화하는 것입니다.

모달 대화 상자가 정상적으로 작동 할 것입니다. - 그렇지 않습니까?

+0

예, 저는 모달 대화 상자의 탭도 잘 작동하지 않습니다. (모달은 메시지 펌프를 소유하고 있기 때문에) 놀랍습니다. 후크를 설치하고 콜백을 추가하여 다음 링크마다 정확하게 변경했습니다. http://support.microsoft.com/kb/187988 (변형은 속성 시트 대신 대화 상자가 있음) –

+0

다음 링크를 보면 꽤 많은 경우입니다 (http://support.microsoft.com)./kb/233263. 어디 dll을 작성하고 응용 프로그램은 DLL을 통해 내 대화 상자를 시작합니다. 그러나 그들이 제공 한 코드 샘플은 나를 혼란스럽게 만들었습니다. 두 가지 방법 모두에서 변수 hwndDllDlg를 사용했는데 대화 상자가 무엇인지, 어떻게 시작해야할지 모르겠습니다. @Igor Tandetnik 알고 계십니까? –

+0

하나의 경우,'hwndDllDlg'는'DllDlgProc'에 대한 매개 변수의 이름입니다. 두 번째 경우에는'CreateDialog'에 의해 반환 된'HWND'가 저장되는 전역 변수 또는 뭔가의 이름이 될 것이라고 상상합니다. –