SetWindowPos控制PropertySheet大小與位置

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章