gpt4 book ai didi

c++ - Windows API SetWindowSize() 似乎没有效果

转载 作者:行者123 更新时间:2023-12-01 14:44:53 29 4
gpt4 key购买 nike

我的目标应该是一个非常简单的目标,但它似乎很棘手。我必须为文档获取一些精确大小的屏幕像素,所以我认为添加一个控件来将我的应用程序窗口的大小调整到我想要的精确尺寸是有意义的。

我正在使用 VS2010。

这是我的向导生成的对话框中的相关代码:

DlgSetWindowSize::DlgSetWindowSize(CWnd* pParent /*=NULL*/)
: CDialogEx(DlgSetWindowSize::IDD, pParent)
{
m_width = 0;
m_height = 0;
m_parent = pParent;
}

void DlgSetWindowSize::OnBnClickedOk()
{
CDialogEx::OnOK();
SetWindowPos(m_parent, 0, 0, m_width, m_height, SWP_NOMOVE|SWP_NOZORDER|SWP_NOOWNERZORDER);
}

这是对它的调用:

void CMyAppView::OnWindowSize()
{
DlgSetWindowSize d(this);
if (IDOK == d.DoModal())
{
Invalidate();
}
}

SetWindowPos 返回一个非零值,根据文档 (click here),这表示成功。当然,在运行对话框时,我输入了我想要的宽度和高度像素值。调试器验证是否将预期值传递给 SetWindowPos,并且 SetWindowPos 提供非零返回值。 SetWindowPos 的最后一个参数中的位开关被设置为忽略位置参数并且仅表示该调用中的 size 参数,以便窗口应按我想要的大小调整不改变位置。

一切看起来都井井有条,但窗口大小没有改变。我已将此逻辑应用到我的应用程序的文档窗口,当它不起作用时,我还将它应用到应用程序的 MainFrame 窗口。零行动。

我是不是遗漏了什么,或者我应该使用一些完全不同的方法?

最佳答案

从你对CDialogEx的使用和命名约定来看,我猜你使用的是MFC,对吧?

您对 SetWindowPos() 的调用在对话窗口本身上运行,因为这是一个类方法。

如果你想调用父级的 SetWindowPos(),你可以这样做:

m_parent->SetWindowPos(0, 0, 0, m_width, m_height,
SWP_NOMOVE|SWP_NOZORDER|SWP_NOOWNERZORDER);

另请注意,在 MFC 文档 View 体系结构中,文档没有窗口。

或者,您可以使用 Win API 调用:

::SetWindowPos(m_parent->GetSafeHwnd(), 0, 0, 0, m_width, m_height,
SWP_NOMOVE|SWP_NOZORDER|SWP_NOOWNERZORDER);

关于c++ - Windows API SetWindowSize() 似乎没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33280793/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com