본문 바로가기

Programing/C와 C플플

[C/C++]MFC 다이얼로그 / 멀티쓰레드 간 통신 - SendMessage

다이얼 로그에서

특정 버튼을 클릭하면

별도의 쓰레드를 생성하여 별도의 로직을 수행하는 프로그램을 만들었는데,

 

위의 목적은 별도의 로직을 수행하면서

다이얼로그의 이벤트를 체크하기 위함이었습니다. ex. cancel 등

 

그런데, 별도 실행자체는 문제가 없었는데

쓰레드에서의 결과를 다이얼로그의 로그로 찍어줄려니까,

쓰레드의 상태를 알수 있는 방법이 없었습니다.

 

그러던 중에 알게 된것이

SendMessage와 OnCopyData입니다.

 

이 두 함수를 이용하면,

쓰레드에서 다이얼로그의 함수를 실행시킬수 있습니다.

 

이를 위해선 먼저,

다이얼로그 클래스에서 OncopyData를 overide시켜줘야 합니다.

먼저 헤더.

 

 

public에 OncopyData함수를 선언해주고,

 

그 다음 다이얼로그 cpp에서

 

다음과 같이 BEGIN_MESSAGE_MAP과 END_MESSAGE_MAP

사이에 ON_WM_COPYDATA()를 추가해주면 됩니다.

 

그리고 이제 쓰레드에서 SendMessage를 보낼때에는,

 

다음과 같이 COPTYDATASTRUCT를 생성하여 sendMessage를 호출하면 됩니다.

여기서 주의할점은 findWindow할 때 인자는

프로세스의 이름이 아니라 윈도우 창 이름이라는 것정도만 유의하면 됩니다.