gpt4 book ai didi

c++ - 基于 CDialog 的 MFC 应用程序仅在主监视器中启动

转载 作者:可可西里 更新时间:2023-11-01 11:49:02 25 4
gpt4 key购买 nike

例如,我通过双击其可执行文件从 Windows 资源管理器启动基于 CDialog 的 MFC 应用程序。它通常在屏幕中央显示对话窗口。

但如果我将 Windows 资源管理器窗口移动到辅助监视器并在那里双击它,它的窗口仍显示在主监视器中。

如何让它在监视器中显示应用程序的启动位置?

附言。对话框窗口从 InitInstance 显示如下:

CTestMFCDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();

最佳答案

好的。我知道了。没关系。

谁有兴趣,MFC没有多显示器的概念。因此需要重写居中方法:

void CTestMFCDlg::CenterWindowSmart()
{
//Try to get the monitor that the process was started in
STARTUPINFO si = {0};
::GetStartupInfo(&si);
MONITORINFO mi = {0};
mi.cbSize = sizeof(mi);
if(::GetMonitorInfo((HMONITOR)si.hStdOutput, &mi))
{
//Got monitor size & position where the process was started in
CRect rcThis;
this->GetWindowRect(rcThis);

int x = ((mi.rcWork.right - mi.rcWork.left) - rcThis.Width()) / 2;
int y = ((mi.rcWork.bottom - mi.rcWork.top) - rcThis.Height()) / 2;

this->MoveWindow(mi.rcWork.left + x, mi.rcWork.top + y, rcThis.Width(), rcThis.Height());
}
else
this->CenterWindow();
}

基于 STARTUPINFO structure 的备注(搜索 HMONITOR。)

关于c++ - 基于 CDialog 的 MFC 应用程序仅在主监视器中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35195726/

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