2011-12-10 2 views
4

그것은 열매를 맺기 시작하지만 z- 순서로 자식 컨트롤의 위치를 ​​유지하는 방법을 알 수는 없습니다. MFC 대화 상자 리소스 편집기에서 디자인 타임에 정적 컨트롤 (CStatic의 자손) 하단 (탭 순서 번호 1) 즉, 즉.MFC 대화 상자에서 컨트롤의 Z- 순서를 유지하는 방법?

void CTestMFCDlg::OnTimer(UINT_PTR nIDEvent) 
{ 
    ... 
    m_stMyStatic.SetWindowPos(&this->wndBottom, xpos, ypos, 0, 0, SWP_NOSIZE); 
    ... 
} 

을 sublassed의 CStatic 컨트롤을 SetWindowPos의 호출 후 : 그것은 버튼과 같은 다른 컨트롤, 목록 상자 등 런타임시

이 대화 상자가 WM_TIMER 메시지를 처리하고 OnTimer 처리기에서 정전기 제어 이동이 가져가 겹쳐있어 , 첫 번째 인수에서 무엇을 전달하는지에 관계없이 대화 상자의 다른 컨트롤 위에 그려집니다.

컨트롤을 Z 순서의 맨 아래에 항상 유지하는 방법에 대해 알고 싶습니다.

+0

당신이 당신의 대화에서'WS_CLIPSIBLINGS' 스타일이 있습니까? 그렇지 않으면 컨트롤이 z 순서와 관계없이 서로 위에 나타날 수 있습니다. 어쨌든, ** 실제 ** z 순서의 윈도우를 확인해야합니다 (win-spy로). – valdo

+0

대화 상자의 클립 형제 속성이 true로 설정됩니다. Spy ++로 실행중인 앱을 검사했지만 컨트롤의 z- 순서에 대한 정보를 어디에서 찾을 수 있는지 찾을 수 없었습니다. –

+0

Here : http://stackoverflow.com/questions/160105/how-can-you-bring-a-control-to-front-in-mfc –

답변

2

대답은 간단합니다. SetWindowPos 문서에서 한 플래그를 간과 한 것뿐입니다. 는 SWP_NOZORDER 플래그를 통과 단지 변경 z 순서를 방지하기 때문에 함수 호출은 다음과 같은 모양입니다 :

m_stMyStatic.SetWindowPos(NULL, xpos, ypos, 0, 0, SWP_NOSIZE | SWP_NOZORDER); 
관련 문제