1. 程式人生 > >MFC控制元件重疊顯示與響應處理

MFC控制元件重疊顯示與響應處理

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);

具體例子可參考:


測試程式碼下載: