MFC控制元件重疊顯示與響應處理
阿新 • • 發佈:2019-01-26
MFC的控制元件重疊時,顯示和響應就會出問題。例如一個屬性表格,點選下拉按鈕,動態建立一個月曆來選擇日期。
月曆顯示在表格前面,存在兩個問題:
1、點選月曆控制元件日期,表格顯示出來了,顯示亂套了。
2、點選前面的月曆控制元件,後面的表格先響應了。
如何讓前面的控制元件接收點選訊息?
解決方法:
1、要使下面的表格控制元件視窗具有WS_CLIPSIBLINGS風格,這樣上面的控制元件才能完整顯示出來。
如果該控制元件是在資源編輯器拖放的,可以通過關聯的控制元件變數改變視窗風格:
m_propertyGrid.ModifyStyle(0,WS_CLIPSIBLINGS );
如果該控制元件是動態建立的,可以在建立時指定:
m_dtCtrl->Create ( WS_VISIBLE|WS_CHILD|WS_BORDER | MCS_DAYSTATE | WS_CLIPSIBLINGS, rect, (CWnd *)AfxGetApp()->m_pMainWnd, 200 );
2、要使前面的月曆控制元件m_dtCtrl處於Z順序的最頂端,才能最先響應點選訊息,下面函式第一個引數必須是NULL:
m_dtCtrl->SetWindowPos(NULL,0,0,0,0 ,SWP_NOMOVE|SWP_NOSIZE);
具體例子可參考:
測試程式碼下載: