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

Posted

技术标签:

【中文标题】将 CTaskDialog 的宽度设置为屏幕宽度的 50%【英文标题】:Setting width of CTaskDialog to 50% of screen width 【发布时间】: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% 的屏幕宽度显示消息框(如果我启用了我的代码)?

【问题讨论】:

【参考方案1】:

看起来 MFC 文档有误。这就是Win32 documentation 对TASKDIALOGCONFIG::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 因素进行测试。 嗯,它不必是精确的。我只是希望对话框更宽,以便它看起来更适合恕我直言的路径。

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

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

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

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

布局约束将图像大小调整为屏幕宽度保持纵横比

Flutter之Container的宽度如何设置为手机屏幕宽度

Flutter之Container的宽度如何设置为手机屏幕宽度