Использование скрытых значков безопасности в Taskdialog
Я пытаюсь отобразить значок безопасности успешно (с синим фоном) в окне сообщения TaskDialog. Это не одно из значений перечисления TaskDialogStandardIcon. Ссылка: http://dotnet.dzone.com/articles/using-new-taskdialog-winapi.
Как назначить эти нестандартные значения отправителю ((TaskDialog)).Icon? Это вообще возможно в C#? C#
Любые указатели были бы действительно полезны.
С уважением, Эшвин
3 ответа
Я думаю, вам нужно будет импортировать TaskDialog
функция от comctl32.dll
сам:
static class TaskDialogWrapper
{
[DllImport("comctl32.dll", CharSet = CharSet.Unicode, EntryPoint = "TaskDialog")]
static extern int TaskDialog(IntPtr hWnd, IntPtr hInstance, string pszWindowTitle, string pszMainInstruction, string pszContent, TaskDialogCommonButton dwCommonButtons, IntPtr pszIcon, out IntPtr pnButton);
public static TaskDialogCommonButton Show(IntPtr handle, IntPtr instance, string title, string instructionText, string content, TaskDialogCommonButton commonButtons, TaskDialogCommonIcon commonIcon)
{
IntPtr resultButton;
if (TaskDialog(handle, instance, title, instructionText, content, commonButtons, new IntPtr((int)commonIcon), out resultButton) != 0)
throw new InvalidOperationException();
return (TaskDialogCommonButton)resultButton;
}
}
[Flags()]
enum TaskDialogCommonButton
{
Ok = 0x1,
Yes = 0x2,
No = 0x4,
Cancel = 0x8,
Retry = 0x10,
Close = 0x20
}
enum TaskDialogCommonIcon
{
ShieldGrey = 65527,
ShieldOk = 65528,
ShieldError = 65529,
ShieldWarning = 65530,
ShieldBlue = 65531,
Shield = 65532,
Information = 65533,
Error = 65534,
Warning = 65535,
}
Чтобы использовать собственную иконку из файла, вам нужно будет импортировать TaskDialogIndirect
,
(Кстати, я нашел много других интересных стилей иконок для TaskDialogCommonIcon
, Вы можете добавить, например:
enum TaskDialogCommonIcon
{
None = 0,
Sheet = 2,
ExplorerFolderOpen = 3,
ExplorerFolderFlat = 5,
ExplorerFolderLeft = 6,
Search = 8,
ExplorerFolderClosed = 10,
ExplorerGames = 14,
Application = 15,
TransparentSpace = 17,
ExplorerSearch = 18,
TextFile = 19,
Letter = 20,
Picture = 21,
Diashow = 103,
// ...
}
Я знаю, что это старый вопрос, но я искал что-то похожее, поэтому я решил передать то, что нашел. Используя информацию, опубликованную @KnorxThieus, я нашел способ использовать "скрытые" значки безопасности в TaskDialog, не проходя процесс DLLImport, описанный выше. Используя фактические значения, которые он предоставил для TaskDialogCommonIcon
Перечисление, я обнаружил, что вы можете просто привести их к соответствующему типу (т.е. TaskDialogCommonIcon
), и ваше приложение должно отображать их правильно.
Обратите внимание, что я использую WindowsAPICodePack версии 1.1.2 из Nuget (nuget.org/packages/WindowsAPICodePack-Core), а приведенный ниже код был преобразован из Visual Basic с помощью Telerik Code Converter ( http://converter.telerik.com/), так что, возможно, вам придется выполнить некоторые настройки в C#:
if (TaskDialog.IsPlatformSupported) {
using (TaskDialog dialog = new TaskDialog()) {
dialog.Caption = "TESTING";
dialog.InstructionText = "THIS IS A TEST";
dialog.Text = "This is a test of casting a value to the desired Icon type for a TaskDialog.";
// Produces the green shield with green background
dialog.Icon = (TaskDialogStandardIcon)65528;
dialog.OwnerWindowHandle = this.Handle;
dialog.Show();
}
}
В моем тестировании это работает для всех перечислений, перечисленных @KnorxThieus, а также для некоторых других. Я пытаюсь выяснить, есть ли подобный метод для настройки Icon
свойство в другой (нестандартный) файл изображения, но я до сих пор не добился этого. Я надеюсь, что это поможет любому, кто столкнется с этим в будущем.
Взгляните на Ookii.Dialogs. Он реализует TaskDialog
и другие диалоги, а также версии для WPF и Windows Forms.