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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将CTaskDialog的宽度设置为屏幕宽度的50%相关的知识,希望对你有一定的参考价值。

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

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

    if (!m_strErrorFile1.IsEmpty() && !m_strErrorFile2.IsEmpty())
    {
        strContent.Format(_T("Source file: %s
Target 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%的屏幕宽度显示消息框(如果我启用了我的代码)?

答案

看起来MFC文档是错误的。这就是Win32 documentation关于TASKDIALOGCONFIG::cxWidth所说的:

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

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

以上是关于将CTaskDialog的宽度设置为屏幕宽度的50%的主要内容,如果未能解决你的问题,请参考以下文章

即使宽度设置为 50,容器也会占用整个宽度

将relativelayout的宽度设置为屏幕宽度的1/3?

div css布局网页如何实现网页自动适应屏幕高度和宽度

将 UILabel 设置为屏幕宽度和高度以适合包含的文本

带有圆角而不是 100% 屏幕宽度的自定义片段对话框

将 div 的高度设置为宽度的一半