SetWindowPos控制PropertySheet大小與位置
0 SetWindowPos(摘自 HelpLibrary)
函數原型:
virtual HDWP SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags, HDWP hdwp = NULL);
參數解釋:
pWndInsertAfter:標識着比Z-Order比當前CWnd靠前的CWnd
x:調用後的窗口的左座標
y:調用後的窗口的頂部座標
cx:調用後的窗口寬度
cy:調用後的窗口高度
nFlag:調用標識位
hdwp:包含了一個或多個窗口大小、位置的結構句柄
1 使用SetWindowPos控制PropertySheet
1.0 PropertySheet的大小是由最大的Page或創建時所指定的標識位決定的
1.1 可以在WM_SHOWWINDOW或WM_SIZE調用SetWindowPos
1.2 調用標識位:SWP_NOZORDER、SWP_NOACTIVATE、SWP_NOOWNERZORDER
1.3 調整PropertySheet大小
1.3.0 在CPropertySheet派生類中響應WM_SHOWWINDOW或WM_SIZE,通過獲取到Page的指針來獲取到Page的大小(獲取到的是Page相對於PropertySheet的客戶區矩形座標)
1.3.1 通過獲取到的Page矩形來計算PropertySheet的最終矩形。需要注意的是:默認情況下,PropertySheet中除了Page外還有一個Tab Control,如果無需顯示它,可以將其隱藏(GetTabControl()->ShowWindow(SW_HIDE)),以Page爲基準來計算;否則需要將其考慮在內
1.3.2 除上述標識位外,使用SWP_NOMOVE來調整大小,這樣不會改變PropertySheet的位置,便於控制
1.3.3 SWP_NOMOVE在使用時,任意指定x,y參數值不會影響結果
1.4 調整PropertySheet位置
1.4.0 在容器窗口中響應WM_SHOWWINDOW或WM_SIZE,根據容器窗口中的其他控件來計算PropertySheet的位置
1.4.1 以1.2中的標識位或上SWP_NOSIZE來調用SetWindowPos;需要注意的是:此時調用SetWindowPos所指定的cx、cy參數一定要與PropertySheet的寬高一致,並不像調整大小時,可以隨意指定x、y一樣隨意指定cx、cy。若指定的寬高與PropertySheet的實際寬高不一致將出現可未定義的結果
2 MoveWindow與SetWindowPos的調整座標系基準
調用這倆方法時:
若調用窗口擁有父窗口,那麼所有調用都是基於父窗口客戶區座標系進行的。
未指定父窗口的窗口,其父窗口並不是桌面(GetDesktopWindow)