Установка ширины CTaskDialog до 50% ширины экрана - PullRequest
2 голосов
/ 21 апреля 2019

У меня проблемы с настройкой ширины.Это мой код:

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 Ответ

3 голосов
/ 21 апреля 2019

Похоже, что документация MFC неверна. Это то, что Win32 документация говорит о TASKDIALOGCONFIG::cxWidth:

Ширина клиентской области диалога задач, в единицах диалога . Если 0, Диспетчер диалогов задач вычислит идеальную ширину.

Документация Win32 применяется, потому что CTaskDialog::SetDialogWidth() фактически просто устанавливает элемент TASKDIALOGCONFIG::cxWidth.

...