将CTaskDialog的宽度设置为屏幕宽度的50%

时间:2019-04-21 16:47:34

标签: mfc taskdialog

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

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();
}

这是消息框的外观:

Task Dialog

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

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

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

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

1 个答案:

答案 0 :(得分:3)

好像MFC文档是错误的。 Win32 documentationTASKDIALOGCONFIG::cxWidth说的就是这样:

  

任务对话框工作区的宽度,以对话框为单位。如果为0,则   任务对话框管理器将计算理想宽度。

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