Programming/COM,ATL
ATL 프로젝트에서 hWnd사용하기
TanSanC
2016. 3. 25. 11:19
ATL 프로젝트에서 hWnd사용하기
문제 상황 :
ATL 프로젝트에서
소켓 통신을 위한 쓰레드를 만들어 사용하다
소켓 통신 도중 특정 메시지 수신시
ATL 이벤트를 발생 시키고 싶었다.
------요약-----------
Worker Thread 에서 ATL event(Fire_xxxx) 실행
직접 Fire 함수를 실행시 Invoke 부분에서
E_UNEXPECTED Catastrophic failure. 를 리턴한다.
Worker Thread 에서 ATl main Thread 의 함수를 실행하여 그런것 같다.
SendMessage 나 PostMessage 로 Main Thread 가 실행하도록 메시지를 주는 방법을 찾던 도중
SendMessage가 hWnd 를 이용하여 타 쓰레드간 메시지를 주고 받을수 있다는 점을 활용하였다.
하지만 기본 ATL 객체는 hWnd 를 갖고 있지 않다.
생성자 호출 시
상속 받은 m_bWindowOnly 변수를 TRUE 로 초기화하면
m_bWindowOnly = TRUE;
상속 받은 m_hWndCD 를 사용 할 수 있다.
m_hWndCD를 활용하여 WorkerThread 에서
메인 쓰레드로 메세지를 준다.
::SendMessage(pHelloCtrl->m_hWndCD, WM_xxx, (WPARAM)NULL, (LPARAM)NULL);