Как добавить иконку в MessageBox?

183
20 января 2020, 11:20

Есть класс, в котором описан метод:

 public static extern int MessageBox(IntPtr handle, 
     string text, string title, uint type);

Я вызываю его с указанными параметрами в обработчике:

IntPtr handle = this.Handle;
string text = "text";
string title = "title";
uint type = 4;
WinAPIClass.MessageBox(handle, text, title, type);

Подскажите, пожалуйста, как добавить иконку MB_ICONQUESTION?

Answer 1

Правильный ответ - с помощью апи MessageBox - никак.

Можно попробывать два варианта.

1.Хакерский :)

  1. получить HWND окна MessageBox'а,
  2. получить HWND под-окна где распологается родная иконка (неважно какая),
  3. загрузить свой битмап (из ресурса или файла),
  4. с помощью SendMessage запульть туда свой битмап (в окно из пункта 2).

2.Написать самому MessageBox с нуля

Это не так сложно как кажется, например на основе элемента Dialog.

Есть и сторонние наработки, приведу несколько ссылок:

TaskDialogIndirect создает, отображает и управляет диалоговым окном задачи. Диалог задач содержит определенные приложением значки, сообщения, заголовок, флажок проверки, ссылки на команды, кнопки и переключатели.

  • https://docs.microsoft.com/ru-ru/windows/desktop/api/commctrl/nf-commctrl-taskdialogindirect

Использование хуков Windows для улучшения MessageBox в .NET

  • http://web.archive.org/web/20150519135315/https://msdn.microsoft.com/en-us/magazine/cc188920.aspx

CustomMessageBox - работает точно так же, как обычный класс сообщений. Автор Brian Graham

  • https://pastebin.com/m8evBmZi

  • https://pastebin.com/CRXjeUFN

  • https://pastebin.com/jawHZDzY

Имеет смысл посмотреть в сторону фреймворка Metro .NET, там много элементов с расширенным функционалом, в том числе и MessageBox (Dialog)

  • https://mahapps.com/controls/dialogs.html
READ ALSO
Как связать int с void c#

Как связать int с void c#

Ошибка не удается преобразовать тип void в int, что я неправильно делаюМетод находится -

201
Нажатие кнопок в другой программе через C#

Нажатие кнопок в другой программе через C#

Задумка сделать программу которая выполняет действия на основе полученной голосовой команды для домашнего использования (как во всяких...

151
c++ что означают данные строки?

c++ что означают данные строки?

Имеется фрагмент когда

147