2011-12-10 36 views
4

它開始驅使我堅果,但我無法弄清楚如何保持z控制器的位置。 在設計時在MFC對話框資源編輯器中,我有STATIC控件(CStatic的後代)在底部(Tab鍵順序編號1),即。如何在MFC對話框中保持控件的Z順序?

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

SetWindowPos爲sublassed CStatic的控制通話結束後:它是由類似按鈕的控件,列表框等

在運行時,對話框處理WM_TIMER消息,並在計時器觸發處理程序有變靜態控制移動重疊,無論我在第一個參數中傳遞什麼,它都會在對話框中的其他控件上繪製。

任何想法如何保持在Z順序的底部,所有的時間控制?

+0

你有你的對話框中'WS_CLIPSIBLINGS'風格?如果不是這樣,控制器可以不考慮z順序而彼此重疊。無論如何,你應該檢查你的windows的**實際** z順序(通過win-spy)。 – valdo

+0

對話框的剪輯兄弟屬性設置爲true。我確實使用Spy ++檢查了正在運行的應用程序,但沒有找到我可以在哪裏閱讀有關控件的z順序。 –

+0

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

回答

2

答案很簡單。我在SetWindowPos文檔中忽略了一個標誌。 爲了防止Z順序只是改變通過SWP_NOZORDER標誌,所以函數調用看起來應該像:

m_stMyStatic.SetWindowPos(NULL, xpos, ypos, 0, 0, SWP_NOSIZE | SWP_NOZORDER);