我已经在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;
}发布于 2012-07-26 19:40:55
而不是
GetWindowRect(&r);你应该使用
GetClientRect(&r);因为GetWindowRect返回的坐标是相对于屏幕的左上角的,而MoveWindow调用子控件时希望它们相对于父窗口的工作区的左上角。
发布于 2012-07-26 20:40:51
我使用winapi。因为我使用GetWindowRect来获取控件坐标,然后使用MapWindowPoints将这些矩形坐标映射到屏幕上。然后使用SetWindowPos根据映射的矩形坐标定位窗口。
在谷歌上,我找到了MapWindowPoints for ATL。我认为您在代码中使用的是mapwindowpoints。试着用这个。
希望它能起作用...
https://stackoverflow.com/questions/11667264
复制相似问题