2009-04-22 9 views
0

내 프로그램에 여러 스레드가 있습니다. 메시지 상자를 사용하여 사용자에게 정보를 표시하고 있습니다. 메시지 상자가 여전히 화면에 표시되고 사용자가 볼 수있는 동안 다른 스레드 업데이트/메시지 상자 표시 텍스트를 변경할 수있는 여하튼 (또는 메시지 상자의 대안) 있습니까?win32 : MessageBox 텍스트를 변경 하시겠습니까?

답변

1

GetCurrentThreadId() 및 SetWindowsHookEx()를 통해 스레드 별 후크를 사용하면 MessageBox()가 내부적으로받는 메시지를 연결하고 대화 상자의 기본 창 핸들에 액세스 할 수 있으므로 모든 대화 상자의 자식 컨트롤 그런 다음 필요에 따라 대화 상자와 컨트롤을 사용자 정의 할 수 있습니다. 이 기술은 일반적으로 MessageBoxTimeout()이 도입되기 전에 자체 닫기 대화 상자를 구현하고 버튼의 텍스트를 사용자 정의하는 데 사용됩니다.

5

표준 Win32 메시지 상자를 사용하는 경우 상자가 이미 표시되면 텍스트를 변경하는 방법이 없다고 생각합니다 (모달 메시지 펌프 입력).

다른 스레드의 메시지/업데이트를 수신하는 자신 만의 창을 만드는 것이 좋습니다. 당신이 통제 할 수있는 그런 식으로.

+1

정답입니다. 기본 메시지 상자는이를 위해 설계되지 않았습니다. 이를 지원하기 위해 자신 만의 대화 상자와 API를 만들어야합니다. 희소식은 이것이 너무 어렵지 않을 것이라는 점입니다. PostThreadMessage()에 Windows 메시지를 사용하면 여기에 친구가됩니다. – Foredecker

+1

예, MessageBox() 텍스트를 동적으로 변경할 수 있습니다. MesageBox()를 호출하기 전에 SetWindowsHookEx()를 사용하여 CBT 후크를 설치하십시오. 후크는 대화 상자의 HWND를 제공하며 대화 상자의 모든 하위 창에 액세스하여 원하는대로 수행 할 수 있습니다. –

+0

@Remy - coll trick =) –

0

직접적인 방법이 없다고 생각합니다. 아마도 창 핸들을 얻으려고 할 수는 있지만 너무 복잡합니다. 가장 좋은 방법은 자신 만의 대화 상자를 만들어서 완벽하게 제어 할 수 있도록하는 것입니다.

관련 문제