보통 소켓 컴포넌트를 작성할 때 비동기로 동작시키려면 내부에 메시지를 받아줄
윈도우를 하나 만들기 마련입니다. (TComponent상속)
물론 보이지 않게 띄우죠.
그동안 이런 부분은 전부 Win32API를 직접 이용해서 윈도우를 생성했습니다.
윈도우 프로시져 선언하고.. 그 프로시져로 윈도우 클래스 선언하고..
윈도우 생성하고.. 얻어진 핸들을 이용해서 SetProp이었던가.. 아무튼 그 함수로
윈도우에 컴포넌트의 포인터를 집어 넣어 놓고 윈도우 프로시져에서는 그 포인터
를 dynamic_cast로 TComponent*로 캐스팅하고 Dispatch() 함수를 콜 하게끔..
만들어서 썼죠. 이렇게 하면 매번 컴포넌트마다 새로운 윈도우 프로시져를 선언해
야 하는 번거로움도 없고 그냥 메시지맵으로 메시지를 잡아낼 수 있으니까요.
나름대로 머리를 굴렸던거죠.
근데 오늘 우연히..
VCL의 TClientSocket의 소스를 살펴봤슴다..
거기에도 HWnd라는 맴버가 있는데.. 그걸 초기화 하는 루틴이.. 원래는 당연히 API
를 썼으려니.. 했는데.. 요상한 함수가 있었슴다..
AllocateHWnd...
DeallocateHWnd...
Help를 봤슴다. 너무나 단순했슴다.
위의 번잡한 코드를 단 한줄로 끝내버리고 있었슴다..
가심이 아팠슴다..
원래 100줄 가까이 되던 코드가 전부 코맨트 처리되고
딸랑 한 줄 남았슴다..
ㅠ ㅠ
진작좀 볼껄..
속에서 울화통이 터지고 있었슴다..
ㅠ ㅠ 쭐쭐쭐...
|