|
음..
어떤 Component ( 또는 Control) 을 만들려고 하시는지 궁금합니다.
대부분의 기능은 window-message로 처리됩니다.
그리고 focus를 잃거나 하는것은 parent-control 의 마우스 클릭 이벤트 등을 체크해서 처리하는것이 아닙니다.
windows-system( OS) 에서 mouse-down이 다른 control 위치 에서 발생하면
알아서 이전에 foucs가 있던 control에 WM_KILLFOCUS 메세지 등을 보내줍니다.
새로 focus가 가는 control에는 WM_SETFOCUS 등의 메세지를 보내주는것이구요
system(os)에서 지원하지 않는
보모control과 자식control간에 메세지 교환이 필요하다면 직접 SendMessage / PostMessage등으로 구현하면 되구요
------------------------------------------------------------
참고로 TComboBox는 하나의 윈도우로 구현된 control 이 아닙니다.
3개의 윈도우로 구현된 control입니다.
Form위에 Button을 두개 올리면 그 폼은 3개의 윈도우로 구성된 폼이 되듯이
1. 하나는 화면에 보이는 TComboBox 이구
2. 또하나는 ComboBox에 무엇을 입력할때 Win32-Control인 "EDIT"라는것에 Focus가 가서 입력됩니다.
"EDIT"에서 키보드 입력을 받아서 화면에 보여주고 , 입력이 끝나면 TComboBox에게 내용을 전해주는것이죠
3. 마지막 하나는 TComboBox의 내용을 dropdown-list로 볼때 화면에 나타나는 윈도우로써
"ComboLBox" 라는 win32-control이 있습니다.
이 "ComboLBox"라는 놈도 화면에 내용을 보여주고 마우스/키보드 입력에 따라 선택이 되면
그 결과를 TComboBox에 전해줍니다.
------------------------------------------------------------
TComboBox에서 dropdown리스트를 보고 있는 상태에서 다른 window나 폼에 mouse-click하였을때는
system(Os)에서 "ComboLBox"에다가 적당한 메세지를 보내줍니다.
WM_CANCELMODE , WM_CAPTURECHANGED 등의 메세지를...
"ComboLBox"에서 그 메세지를 받아서 화면에서 사라지던가 처리하는것이죠
------------------------------------------------------------
그럼...
김형기 님이 쓰신 글 :
: 에디트 컨트롤을 상속하여 사용자 컨트롤을 하나 만들려고 하는데 부모의 이벤트를 확인하려면 어떻게 해야할까요?
: 부모폼과 메세지를 주고받거나 이런게 아니라 컨트롤 내에서 모두 코딩하여 실제로 사용할때는 생성만 해놓으면 원하는 기능이 발현되게 말이죠...
:
: 예를 들면 콤보박스의 경우 아이템들이 드랍다운 된 다음 콤보박스 이외의 다른 컨트롤을 선택한다던지 부모폼을 선택하면 드랍다운된 아이템이 사라집니다. 부모폼을 클릭하면 포커스는 그대로 유지되구요. 이런 기능은 어떻게 구현되었을까요?
:
: 고수님들의 지도편달 부탁드립니다.
|