1

我在 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;
}
4

2 回答 2

4

我用的是winapi。我使用GetWindowRect来获取控制坐标,然后使用MapWindowPoints将这些直角坐标映射到屏幕上。然后使用SetWindowPos根据映射的直角坐标定位窗口。

在 Google 上,我找到了 ATL 的 MapWindowPoints。我认为您在代码中使用的是 mapwindowpoints。尝试使用它。

希望它工作....

于 2012-07-26T12:40:50.927 回答
2

代替

GetWindowRect(&r);

你应该使用

GetClientRect(&r);

因为返回的坐标GetWindowRect是相对于屏幕左上角的,而MoveWindow调用子控件则期望它们相对于父窗口客户区的左上角。

于 2012-07-26T11:40:55.073 回答