자식윈도우 Z-order 문제
Programming/MFC 2012. 3. 30. 13:57 |
부모윈도우가 메인으로, 자식윈도우 네다섯개를 만들어서 이래저래 사용할 수 있게 만들어야 하는 상황.
각각 개별로 돌아가라고 자식윈도우를 스레드로 만들고 다이얼로그를 생성, 보여주었다.
그런데 망할놈의 자식윈도우들이, 부모윈도우가 활성화되어있는데도 부모윈도우 밑으로 안내려가더라
찾다보니 TopMost라는 게 있어서 이것저것 건드려봤는데도... 흠... 썩 잘 해결되지 않았다.
한 4시간을 헤맸나; 테스트 해보고 실수로 안지워놓은 코드덕분에 문제해결!
방법은 간단했다...
Create(IDD_DIALOG_SUB, CWnd::GetDesktopWindow());
슈발! GetDesktopWindow가 뭐라고 4시간의 고생을 한 줄로 무너트려버렸어ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
자식윈도우는 무조건 부모윈도우의 위에 있어야 한다. 이건 바꿀 수 없다.
왜그런지 생각해봤는데... 갑자기 떠오른 게 있다. 버튼 컨트롤?
버튼 컨트롤도 그 버튼이 위치한 다이얼로그가 버튼 컨트롤의 부모 다이얼로그가 되는 것이다.
버튼 컨트롤도 윈도우다. 당연하다. (CButton 클래스는 CWnd 클래스를 상속받고 있다=_=;;)
그 버튼이 무슨무슨 조작을 했더니, 아닛, 버튼이 다이얼로그 뒤로 가버렸엉! 해버리면 안되지 않은가...
Create 함수의 두 번째에는 그 윈도우의 부모 핸들을 넣게 되어있다.
CWnd::GetDesktopWindow()
이게 아마 바탕화면 핸들을 구하는 함수였었나?
결국 부모와 자식간 관계가 아닌 동등한 위치에 있기 때문에 Z-order를 맘대로 조절할 수 있는 것이다... 라고 함ㅋㅋ
주의할 것이 있는데 저렇게 되면 자식윈도우라고 칭해지는 건 일단 자식윈도우가 아니게 되므로
작업표시줄을 눌렀을 때 최소화가 같이 안된다. 결국 이것저것 절차를 취해서 따로 처리해야 한다는 소리임.
'Programming > MFC' 카테고리의 다른 글
MFC 문자열 총정리 (0) | 2012.06.15 |
---|---|
CString를 char*로 바꾸기 (0) | 2012.04.25 |
VISUAL C++ 2008 MFC 윈도우 프로그래밍 247p 3번 (0) | 2012.02.16 |
RedrawWindow() (0) | 2012.02.13 |
OnPaint() (0) | 2012.02.13 |