2012-07-26 50 views
0

我在C++ windows應用程序(使用ATL lib)中創建了一個對話框,並在其上設置了三個按鈕。該按鈕像往常一樣躺在對話框的底部。我想通過對話框的大小調整,按鈕保留它們在底部的位置。換句話說,它們應該保持與對話框的底部邊界和側邊(右側或左側)的恆定(低)距離。爲了實現這個效果,我嘗試在對話框大小改變時相應地移動按鈕。我使用下面的代碼(僅用於OK按鈕的示例),但唯一的結果是該按鈕在調整大小期間消失。我應該如何修改代碼才能使按鈕保持距對話框底部和右側的距離?在調整大小時在對話框上移動按鈕

LRESULT RenameFolderDlg::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 
{ 
RECT r; 
GetWindowRect(&r); 

CWindow okB(GetDlgItem(IDOK)); 
RECT okR; 
okB.GetWindowRect(&okR); 

okB.MoveWindow(r.right - 80 , r.bottom - 40, okR.right - okR.left, okR.bottom -  okR.top, 1); 

return 0; 
} 

回答

1

而不是

GetWindowRect(&r); 

您應使用

GetClientRect(&r); 

因爲GetWindowRect返回的座標是相對於屏幕的左上角,同時呼籲孩子MoveWindow控件期望它們相對於父窗口客戶區的左上角。

2

我使用winapi。我使用GetWindowRect來獲取控件的座標,然後使用MapWindowPoints將這些直角座標映射到屏幕上。然後使用SetWindowPos根據映射的直角座標定位窗口。

在Google上,我找到了MapWindowPoints for ATL。我認爲你在代碼中佔據的是mapwindowpoints。嘗試使用它。

希望它的工作....