[Win32] HWND ChildWindowFromPoint(HWND hWndParent, POINT Point);
Posted 2008/06/13 02:43|
|
|
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
1. 함수의 원형
HWND ChildWindowFromPoint(HWND hWndParent, POINT Point);
2. 함수의 기능
좌표값을 이용하여 특정 윈도우에 존재하는 자식윈도우(컨트롤 포함)의 핸들 값을 얻는 함수이다.
여기서 좌표값은 해당 윈도우의 클라이언트 좌표계(아래 그림 참조)를 사용한다.
3. 함수의 매개변수에 대한 설명
3.1 hWndParent
자신이 찾고자 하는 자식윈도우를 포함하고 있는 윈도우의 핸들을 명시한다. 아래와 같은
대화상자가 있고 해당 대화상자 내부에 있는 "Button1" 이라는 버튼의 핸들을 찾고자 한다면
먼저 해당 버튼을 포함하고 있는 대화상자의 핸들을 얻어야 하는데 이것은 FindWindow와
같은 함수를 사용하여 간단하게 얻을수 있다.
4. 함수의 반환값
지정한 좌표에서 찾은 자식윈도우의 핸들을 반환한다. 해당 위치에 자식윈도우가 눈에 보이지 않도록
숨겨져있거나 비활성상태로 되어있더라도 찾아서 핸들을 반환한다. 또한 해당 위치에 자식 윈도우가
존재하지 않는다면 대상 윈도우의 핸들이 반환된다. 즉, 대화상자위에 버튼을 검색하고자 했지만
해당 위치에 버튼이 존재하지 않고 대화상자의 바탕이였다면 대화상자의 핸들이 반환된다.
그리고 명시한 좌표값이 검색 대상 윈도우의 영역을 벗어났을 때만 NULL이 반환된다.
HWND ChildWindowFromPoint(HWND hWndParent, POINT Point);
2. 함수의 기능
좌표값을 이용하여 특정 윈도우에 존재하는 자식윈도우(컨트롤 포함)의 핸들 값을 얻는 함수이다.
여기서 좌표값은 해당 윈도우의 클라이언트 좌표계(아래 그림 참조)를 사용한다.

3. 함수의 매개변수에 대한 설명
3.1 hWndParent
자신이 찾고자 하는 자식윈도우를 포함하고 있는 윈도우의 핸들을 명시한다. 아래와 같은
대화상자가 있고 해당 대화상자 내부에 있는 "Button1" 이라는 버튼의 핸들을 찾고자 한다면
먼저 해당 버튼을 포함하고 있는 대화상자의 핸들을 얻어야 하는데 이것은 FindWindow와
같은 함수를 사용하여 간단하게 얻을수 있다.
// 대화상자는 윈도우 클래스명이 동일하기 때문에 클래스명으로 구분하기 힘들다. 따라서
// 대화상자의 타이틀 이름을 이용하여 해당 대화상자를 찾으면 된다.
HWND h_parent_wnd = ::FindWindow(NULL, "TestApp - www.tipssoft.com, (주)팁스웨어");
// 대화상자의 타이틀 이름을 이용하여 해당 대화상자를 찾으면 된다.
HWND h_parent_wnd = ::FindWindow(NULL, "TestApp - www.tipssoft.com, (주)팁스웨어");

3.2 Point
이 변수에 명시한 좌표값을 기준으로 해당 위치에 존재하는 자식 윈도우의 핸들을 얻는다.
위 그림에서 "Button1" 이라는 버튼의 핸들을 얻고자 한다면 (30, 25) 정도의 좌표를
명시해주면 된다.
위 그림에서 "Button1" 이라는 버튼의 핸들을 얻고자 한다면 (30, 25) 정도의 좌표를
명시해주면 된다.
HWND h_parent_wnd = ::FindWindow(NULL, "TestApp - www.tipssoft.com, (주)팁스웨어");
if(h_parent_wnd != NULL){
POINT pos = {30, 25};
HWND h_child_wnd = ::ChildWindowFromPoint(h_parent_wnd, pos);
// "Button1" 이라는 버튼을 찾았다면 해당 핸들이 h_child_wnd에 저장될 것이다.
}
if(h_parent_wnd != NULL){
POINT pos = {30, 25};
HWND h_child_wnd = ::ChildWindowFromPoint(h_parent_wnd, pos);
// "Button1" 이라는 버튼을 찾았다면 해당 핸들이 h_child_wnd에 저장될 것이다.
}
4. 함수의 반환값
지정한 좌표에서 찾은 자식윈도우의 핸들을 반환한다. 해당 위치에 자식윈도우가 눈에 보이지 않도록
숨겨져있거나 비활성상태로 되어있더라도 찾아서 핸들을 반환한다. 또한 해당 위치에 자식 윈도우가
존재하지 않는다면 대상 윈도우의 핸들이 반환된다. 즉, 대화상자위에 버튼을 검색하고자 했지만
해당 위치에 버튼이 존재하지 않고 대화상자의 바탕이였다면 대화상자의 핸들이 반환된다.
그리고 명시한 좌표값이 검색 대상 윈도우의 영역을 벗어났을 때만 NULL이 반환된다.
POINT pos = {30, 25};
HWND h_child_wnd = ::ChildWindowFromPoint(h_parent_wnd, pos);
HWND h_child_wnd = ::ChildWindowFromPoint(h_parent_wnd, pos);
if(h_child_wnd == NULL){
// 좌표가 h_parent_wnd 윈도우의 영역을 벗어난 경우.
} else {
if(h_child_wnd == h_parent_wnd){
// 검색된 윈도우가 부모 윈도우라면 해당 위치에는 자식윈도우가 존재하지 않는다는 뜻이다.
} else {
// 지정한 위치에서 자식윈도우를 찾은 경우.
}
}
// 좌표가 h_parent_wnd 윈도우의 영역을 벗어난 경우.
} else {
if(h_child_wnd == h_parent_wnd){
// 검색된 윈도우가 부모 윈도우라면 해당 위치에는 자식윈도우가 존재하지 않는다는 뜻이다.
} else {
// 지정한 위치에서 자식윈도우를 찾은 경우.
}
}
5. 함수의 주의사항
검색 대상윈도우 내부에 자식윈도우가 겹쳐져 있고 겹쳐진 좌표를 명시했다면 시스템 Z-order 순서상
가장 마지막에 있는 자식윈도우의 핸들이 반환된다. 즉, 겹쳐진 두 자식윈도우 중에서 현재 눈에
보이는 윈도우의 핸들이 반환된다.
검색 대상윈도우 내부에 자식윈도우가 겹쳐져 있고 겹쳐진 좌표를 명시했다면 시스템 Z-order 순서상
가장 마지막에 있는 자식윈도우의 핸들이 반환된다. 즉, 겹쳐진 두 자식윈도우 중에서 현재 눈에
보이는 윈도우의 핸들이 반환된다.
| ||||||
위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
- Filed under : 프로그래밍/WPF
- Tag : ChildWindowFromPoint, CWnd, 자식 윈도우 핸들 구하기
- 2 Comments Trackback



바람의 아그들
| 2009/12/03 10:18 | PERMALINK | EDIT | REPLY |잘 보고 가요~
땡감
| 2010/02/13 21:17 | PERMALINK | EDIT | REPLY |감사합니다 쉽고 정확한 설명 좋네요