2012-10-02 4 views
0

Win32 프로그래밍에서 MessageBox 함수가 동작이 필요한 대화 상자를 시작하면 '확인'을 누를 때까지 응용 프로그램의 다른 창에 포커스를 지정할 수 없습니다. 그럼 Visual Studio 2008의 리소스 편집기에서 디자인 한 대화 상자가 있는데 문제는 내가 시작한 메뉴 항목을 클릭 할 수 있다는 것입니다. 대화 상자가 표시되는 동안 다시 클릭하고 다른 대화 상자를 표시 할 수 있습니다. 그들의. 또한 대화 상자가 열려있는 동안 내 응용 프로그램의 나머지 부분을 사용할 수 있습니다.Win32 - 대화 상자에 포커스/동작이 필요함.

사용자가 메시지 상자 인 것처럼 응용 프로그램에서 다른 작업을 수행하기 위해 사용자 지정 대화 상자에서 '확인'또는 '취소'를 눌러야합니다. 나는 어떻게 이것을 성취 할 것인가? Dialog 리소스에 설정할 수있는 특정 Windows 스타일 또는 전 스타일이 있습니까? 나는 WS_TOPMOST를 시도했지만 아무런 효과가 없다. 나는 무엇을 시도해야할지 모르겠다.

답변

1

대화 상자는 DialogBox()., DialogBoxParam() 또는 직접 대화 상자 모달 실행기로 시작해야합니다. 또한 호출 할 때 응용 프로그램의 최상위 창을 부모 창으로 제공해야합니다. 이렇게하면 모덜리스가 아닌 모달 대화 상자가됩니다. 리소스 스크립트에서 대화 상자 템플릿에 WS_POPUP 창 스타일을 사용하는 것이 중요하지만 일반적으로 기본적으로 설정되므로 문제가되지 않을 수 있습니다.

+0

위대한, 거의 그것입니다. 지금, 나는 아직도 문제가있다. 나는 메인 윈도우와 함께 자유롭게 떠있는 도구 상자를 가지고있다. 이제 대화 상자를 시작할 때 주 창을 예상대로 사용할 수 없지만 대화 상자를 시작하는 단추가있는 도구 창을 사용할 수 있으므로이 대화 상자의 여러 인스턴스를 생성 할 수 있습니다 . 이 대화 상자가 화면에있을 때 응용 프로그램의 다른 창을 사용할 수 없도록하는 가능한 방법이 있습니까? BTW에서는 CreateDialogParam을 사용하여이 툴바를 만들고 표시 할 수 있습니다. –

+0

해당 메인의 모든 하위 항목도 대화 상자의 모달이어야합니다. 도구 창은 어떻게 설정됩니까? 부모의 관계가없는 자유롭게 뜨는 팝업이라면, 그것은 당신이보고있는 것일 수 있습니다. 핸들을 통해 사용할 수있는 경우 대화 상자가 표시되는 동안 대화 상자를 열거하고 사용 중지 할 수 있습니다. 다른 방법이 있지만 그건 내 머리 꼭대기에서 벗어난 것입니다. 당신은 그들이 CreateDialogBoxParam과 함께 표시/숨기기 수 있도록 언급했다. 그래서 .. DialogBox 호출하기 전에 숨기기? = P – WhozCraig

+0

이것은 Windows 도구를 만드는 방법입니다. 스타일/전 스타일 :'DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_EX_TOOLWINDOW'를 사용하고'CreateDialogParam'을 사용할 때'DialogBox' 대화 상자와 같은 상위 항목을 설정합니다.이를 주 윈도우의 핸들로 설정합니다. 그것들은 자유롭게 움직이며 응용 프로그램이 종료 될 때까지 결코 파괴되지 않습니다. 그래서 당신은'EnableWindow'를 사용하여'DialogBox'가 반환 될 때까지 toolwindow를 비활성화 할 수 있다고 말하고 있습니까? 나는 그것이 가장 실용적인 것이라면 그렇게하지 않는 편이 좋을 것입니다. –

관련 문제