在调整对话框大小时移动对话框上的按钮

时间:2012-07-26 10:21:28

标签: c++ winapi dialog move

我在c ++ windows应用程序中创建了一个对话框(使用ATL lib),我已经设置了三个按钮。按钮位于对话框底部。我希望通过调整对话框的大小,按钮保持它们在底部的位置。换句话说,它们应该与对话框的底部边缘和侧面(右侧或左侧)保持恒定(低)的距离。为了实现这一点,我尝试在对话框大小改变时相应地移动按钮。我使用以下代码(仅作为示例仅使用“确定”按钮),但唯一的结果是按钮在调整大小时消失。如何修改代码以使按钮保持与对话框底部和右侧的距离?

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;
}

2 个答案:

答案 0 :(得分:2)

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

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

希望它有用......

答案 1 :(得分:1)

而不是

GetWindowRect(&r);

你应该使用

GetClientRect(&r);

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