【问题标题】:Setting width of CTaskDialog to 50% of screen width将 CTaskDialog 的宽度设置为屏幕宽度的 50%
【发布时间】:2019-04-21 16:47:33
【问题描述】:

我在设置宽度时遇到问题。这是我的代码:

void CWin32FileError::DisplayExceptionMessage()
{
    CString strContent = _T(""); // Default shouldn't happen

    if (!m_strErrorFile1.IsEmpty() && !m_strErrorFile2.IsEmpty())
    {
        strContent.Format(_T("Source file: %s\nTarget file: %s"),
            (LPCTSTR)m_strErrorFile1, (LPCTSTR)m_strErrorFile2);

    }
    else
    {
        strContent.Format(_T("File: %s"), (LPCTSTR)m_strErrorFile1);
    }

    CTaskDialog dlgTaskError(strContent, Description(), _T("Exception"), TDCBF_OK_BUTTON);
    dlgTaskError.SetWindowTitle(_T("Exception"));
    dlgTaskError.SetMainIcon(TD_ERROR_ICON);
    dlgTaskError.SetFooterIcon(TD_INFORMATION_ICON);
    dlgTaskError.SetFooterText(m_strActionDescription);

    //dlgTaskError.SetDialogWidth(::GetSystemMetrics(SM_CXSCREEN) / 2);
    dlgTaskError.SetDialogWidth(300);

    dlgTaskError.DoModal();
}

这是消息框的样子:

上面的屏幕显示使用的值是 300。最初我试图使用:

dlgTaskError.SetDialogWidth(::GetSystemMetrics(SM_CXSCREEN) / 2);

它不喜欢它,几乎和屏幕一样宽。如果我使用 500,那么它看起来几乎占屏幕的 50%。然而,我的屏幕只有不到 2000 像素宽。

帮助文档说明参数是像素,那么为什么我的代码现在以 50% 的屏幕宽度显示消息框(如果我启用了我的代码)?

【问题讨论】:

    标签: mfc taskdialog


    【解决方案1】:

    看起来 MFC 文档有误。这就是Win32 documentationTASKDIALOGCONFIG::cxWidth 所说的:

    任务对话框客户区的宽度,以对话框单位。如果为 0,则 任务对话框管理器会计算出理想的宽度。

    适用 Win32 文档,因为 CTaskDialog::SetDialogWidth() 实际上只是设置了 TASKDIALOGCONFIG::cxWidth 成员。

    【讨论】:

    • 谢谢。那么如何将对话框的宽度设置为对话框单元中屏幕宽度的 50% 或 75%?请记住,如果一个人是两台显示器,从一台显示器跨越到另一台显示器,我们只需要显示任务对话框的显示器宽度?
    • 知道了:DWORD dw = GetDialogBaseUnits(); int iWidth = MulDiv(::GetSystemMetrics(SM_CXSCREEN) / 2, 4, LOWORD(dw)); dlgTaskError.SetDialogWidth(iWidth);
    • @AndrewTruckle 我很惊讶这能行得通,因为GetDialogBaseUnits() 应该只适用于“系统字体”,它不是对话框使用的标准字体盒子。如果两种字体的指标相似,它可能会偶然起作用。确保使用本地化的 Windows(例如通过安装中文语言包)和不同的 DPI 因素进行测试。
    • 嗯,它不必是精确的。我只是希望对话框更宽,以便它看起来更适合恕我直言的路径。
    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 2014-02-09
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多