2

我有这个CTaskDialog我正在研究:

任务对话框

代码如下:

CTaskDialog dlg(_T("How would you like to download the data?"), 
                _T("Download Schedule Information"),
                _T("Meeting Schedule Assistant"), TDCBF_OK_BUTTON | TDCBF_CANCEL_BUTTON);
dlg.SetMainIcon(TD_INFORMATION_ICON);
dlg.SetFooterIcon(TD_INFORMATION_ICON);
dlg.SetFooterText(_T("All assignments for the selected weeks will be reset."));
dlg.AddRadioButton(44444, _T("Download data for all weeks"));
dlg.AddRadioButton(44445, _T("Download data for selected week"));
dlg.AddRadioButton(44446, _T("Download data for selected week and all additional weeks"));
// Set Width in dialog units (40% screen width)
int iPixelWidth = (::GetSystemMetrics(SM_CXSCREEN) / 100) * 40;
int iDialogUnitsWidth = MulDiv(iPixelWidth, 4, LOWORD(GetDialogBaseUnits()));
dlg.SetDialogWidth(iDialogUnitsWidth);

if(dlg.DoModal() == IDOK)
{
    auto iSelection = dlg.GetSelectedRadioButtonID();
}

是否可以将主图标设置为问题?我只能在源代码中看到这些定义:

#define TD_WARNING_ICON         MAKEINTRESOURCEW(-1)
#define TD_ERROR_ICON           MAKEINTRESOURCEW(-2)
#define TD_INFORMATION_ICON     MAKEINTRESOURCEW(-3)
#define TD_SHIELD_ICON          MAKEINTRESOURCEW(-4)
4

1 回答 1

4

SetMainIcon成员函数就是你要找的。像大多数处理 Win32 资源的函数一样,它有两个重载:

void SetMainIcon(
   HICON hMainIcon
);

void SetMainIcon(
   LPCWSTR lpszMainIcon
);

第一个获取图标资源的句柄 ( HICON),而第二个获取一个字符串,用于标识可以从中加载图标资源的资源。

如果要设置任务对话框以显示应用程序的图标,则只需传入适当的HICON. 您还可以使用从应用程序资源加载的自定义图标。

我不完全确定,但我认为您要问的是如何使用问号图标。首先请注意,自 Windows 95 以来,已不推荐在消息框中使用此类图标,Microsoft 强烈反对使用它们。建议您使用它们来表示联机帮助的入口点。引用官方 Win32 风格指南的标准图标部分:

问号图标

  • 问号图标仅用于帮助入口点。有关详细信息,请参阅帮助入口点指南。
  • 不要使用问号图标来提问。同样,问号图标仅用于帮助入口点。无论如何,无需使用问号图标提出问题,将主要说明作为问题呈现就足够了。 不要经常用警告图标替换问号图标。仅当问题具有重大后果时,才将问号图标替换为警告图标。否则,不使用图标。

所以,这就是为什么没有定义标准问号图标的原因。这些TD_*_ICON定义直接来自任务对话框的 Win32 标头(它们与您在TASKDIALOGCONFIG结构中使用的相同),而不是 MFC 包装类的一部分。

如果您绝对必须使用此图标,解决方法如下:

const HICON hiconQuestion = AfxGetApp()->LoadStandardIcon(IDI_QUESTION);
dlg.SetMainIcon(hiconQuestion);

(请注意,同样HICON可以传递给CTaskDialogSetFooterIcon成员函数。)

于 2020-07-28T09:19:29.550 回答