Programing/C와 C플플
[C/C++]MFC 다이얼로그 / 멀티쓰레드 간 통신 - SendMessage
백광
2014. 2. 5. 16:35
다이얼 로그에서
특정 버튼을 클릭하면
별도의 쓰레드를 생성하여 별도의 로직을 수행하는 프로그램을 만들었는데,
위의 목적은 별도의 로직을 수행하면서
다이얼로그의 이벤트를 체크하기 위함이었습니다. ex. cancel 등
그런데, 별도 실행자체는 문제가 없었는데
쓰레드에서의 결과를 다이얼로그의 로그로 찍어줄려니까,
쓰레드의 상태를 알수 있는 방법이 없었습니다.
그러던 중에 알게 된것이
SendMessage와 OnCopyData입니다.
이 두 함수를 이용하면,
쓰레드에서 다이얼로그의 함수를 실행시킬수 있습니다.
이를 위해선 먼저,
다이얼로그 클래스에서 OncopyData를 overide시켜줘야 합니다.
먼저 헤더.
public에 OncopyData함수를 선언해주고,
그 다음 다이얼로그 cpp에서
다음과 같이 BEGIN_MESSAGE_MAP과 END_MESSAGE_MAP
사이에 ON_WM_COPYDATA()를 추가해주면 됩니다.
그리고 이제 쓰레드에서 SendMessage를 보낼때에는,
다음과 같이 COPTYDATASTRUCT를 생성하여 sendMessage를 호출하면 됩니다.
여기서 주의할점은 findWindow할 때 인자는
프로세스의 이름이 아니라 윈도우 창 이름이라는 것정도만 유의하면 됩니다.