首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整对话框大小时移动对话框上的按钮

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

Stack Overflow用户
提问于 2012-07-26 18:21:28
回答 2查看 4.2K关注 0票数 1

我已经在c++ windows应用程序中创建了一个对话框(使用ATL lib),并在其上设置了三个按钮。该按钮照常位于对话框的底部。我想通过调整对话框的大小,将按钮保留在它的底部。换句话说,它们应该与对话框的底部边距和左侧(右侧或左侧)保持恒定(低)的距离。为了使其生效,我尝试在更改对话框大小时相应地移动按钮。我使用了以下代码(仅作为使用OK按钮的示例),但唯一的结果是该按钮在调整大小时消失。我应该如何修改代码,以使按钮保持与对话框底部和右侧的距离?

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-26 19:40:55

而不是

代码语言:javascript
复制
GetWindowRect(&r);

你应该使用

代码语言:javascript
复制
GetClientRect(&r);

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

票数 2
EN

Stack Overflow用户

发布于 2012-07-26 20:40:51

我使用winapi。因为我使用GetWindowRect来获取控件坐标,然后使用MapWindowPoints将这些矩形坐标映射到屏幕上。然后使用SetWindowPos根据映射的矩形坐标定位窗口。

在谷歌上,我找到了MapWindowPoints for ATL。我认为您在代码中使用的是mapwindowpoints。试着用这个。

希望它能起作用...

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11667264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档