문제

내 프로그램에는 여러 스레드가 있습니다. MessageBox를 사용하여 사용자에게 정보를 표시하고 있습니다. 어쨌든 메시지 상자가 여전히 화면에 있고 사용자가 보이는 동안 다른 스레드 업데이트/메시지 상자 표시 텍스트를 변경할 수있는 다른 스레드가있을 수 있습니까?

도움이 되었습니까?

해결책

getCurrentThreadId () 및 setWindowShookex ()를 통한 스레드 별 후크를 사용하여 MessageBox ()가 내부적으로받는 메시지를 연결하고 대화 상자의 기본 창 손잡이에 액세스 할 수 있습니다. 대화 상자. 그런 다음 필요에 따라 대화 상자와 제어를 사용자 정의 할 수 있습니다. 이 기술은 일반적으로 자체 처리 대화 상자를 구현하는 데 사용됩니다 (MessageBoxtImeout ()가 소개되기 전에), 버튼의 텍스트를 사용자 정의하는 등.

다른 팁

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

다른 스레드의 메시지/업데이트를 듣는 나만의 창을 만드는 것이 좋습니다. 그렇게하면 당신이 통제하고 있습니다.

나는 이것을하는 직접적인 방법이 있다고 생각하지 않습니다. 당신은 아마도 창 손잡이를 얻으려고 시도 할 수 있지만 이것은 너무 지저분합니다. 최선의 방법은 자신만의 대화 상자를 만들어 완전히 제어 할 수 있도록하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top