2009. 10. 12. 07:10

Window 에서 Owner 관계

부모-자식 관계는 차일드 윈도우와 다른 윈도우와의 관계인데 비해 소유 관계는 오버랩드 팝업 윈도우간의 관계이다. 이때 다른 윈도우를 소유하는 윈도우를 소유자(Onwer)라고 하는데 오버랩드 윈도우나 팝업 윈도우만 소유자가 될 수 있다. 차일드 윈도우는 소유자가 될 수 없음은 물론이고 소유될  수도 없다.

소유된 윈도우는 소유자보다 항상 화면상의 위에 위치하며 소유자가 숨거나 파괴되면 같이 숨겨지고 파괴된다. 그러나 소유자의 이동은 소유된 윈도우에 아무런 영향도 주지 않는다. 윈도우간의 소유 관계는 CreateWindow 함수의 hwndParent 인수로 지정하는데 단 hwndParent 가 차일드 윈도우인 경우는 그 차일드가 소유자가 되지 않고 차일드를 소유하고 있는 윈도우가 소유자가 된다.

부모-자식 관계와, 소유자 관계의 또 다른 차이점은 부모는 실행중에 SetParent 함수로 변경할 수 있지만 소유 관계는 한번 설정되고 난 후에 변경할 수 없다는 점이다.

소유자 윈도우를 조사할 때는 GetWindow 함수를 사용한다.

HWND GetWindow(HWND hwnd, UINT uCmd);

이 함수는 hWnd 윈도우와 uCmd 관계에 있는 윈도우를 구해 주는데 GW_CHILD 이면 첫 번째 차일드 윈도우를 구해 주며 GW_OWNER 이면 소유자 윈도우를 구해준다.

출처 : Windows API 정복 - 김상형 저