2012-07-26 49 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。尝试使用它。

希望它的工作....