Окно сообщения обнаруживает кнопку YesNoCancel

Я использую приложение VCL Forms в C ++ Builder.
Могу ли я получить некоторую помощь в каком-либо коде, чтобы отобразить окно сообщения с кнопками YesNoCancel, а затем определить, нажата ли кнопка «да», «нет» или «отмена».

Вот мой код:

if(MessageBox(NULL, "Test message", "test title",  MB_YESNOCANCEL) == IDYES)
{

}

Я включил следующее:

#include <windows.h>

Я получаю следующие ошибки:

E2034 Не удалось преобразовать ‘char const [13] «в» const wchar_t * «

E2342 Несоответствие типов в параметре ‘lpText’ (хотел ‘const wchar_t *’, получил ‘const char *’)

Обновить

Вот мой код:

const int result = MessageBox(NULL, L"You have " + integerNumberOfImportantAppointments + " important appointments. Do you wish to view them?", L"test title",  MB_YESNOCANCEL);

Значение: integerNumberOfImportantAppointments является целым числом. Как я могу отобразить это в окне сообщения?

Я получаю следующую ошибку: Invalid Pointer Addition.

Кроме того, я могу выбрать значок для окна сообщения? Вопрос по этому делу.

1

Решение

Ну вот. Вы должны использовать широкие символы в вызове MessageBox и вам нужно сохранить результат в переменной, прежде чем решить, что делать дальше.

const int result = MessageBox(NULL, L"Test message", L"test title",  MB_YESNOCANCEL);

switch (result)
{
case IDYES:
// Do something
break;
case IDNO:
// Do something
break;
case IDCANCEL:
// Do something
break;
}

Обновление, редактирование следующего вопроса:

// Format the message with your appointment count.
CString message;
message.Format(L"You have %d important appointments. Do you wish to view them?", integerNumberOfImportantAppointments);

// Show the message box with a question mark icon
const int result = MessageBox(NULL, message, L"test title",  MB_YESNOCANCEL | MB_ICONQUESTION);

Вы должны прочитать документацию для Окно сообщения.

8

Другие решения

У меня нет опыта работы с C ++ Builder, но кажется, что вы используете строки ANSI, где требуются строки UNICODE (на самом деле широкие символы, но давайте пока проигнорируем детали). Попробуй это:

if(MessageBox(NULL, L"Test message", L"test title",  MB_YESNOCANCEL) == IDYES)

Более того, чтобы убедиться, что ваши строки соответствуют настройкам вашего приложения, вы можете использовать:

if(MessageBox(NULL, _T("Test message"), _T("test title"),  MB_YESNOCANCEL) == IDYES)

Это приведет к использованию широких (wchar_t *) строк в сборках UNICODE и узких (char *) строк в сборках, отличных от UNICODE (см. Раздел «_TCHAR map to» в Варианты проекта)

Для получения дополнительной информации см. Вот

3

Я не уверен, как это сделать в C ++ Building, но вам нужно включить, я думаю, что-то вроде многобитных символов, но вам нужно проверить документацию с помощью вашего компилятора.

1

Все, что написано выше, вероятно, устарело для VS 2015. В моем случае

 MessageBox(NULL, L"Test message", L"test title",  MB_YESNOCANCEL);

не работает, потому что первый аргумент лишний. Ошибка вывода была:

to many arguments in functional call.

Если бы я написал:

const int result = MessageBox( L"Test message", L"test title",  MB_YESNOCANCEL); //Without NULL

switch (result)
{
case IDYES:
// Do something
break;
case IDNO:
// Do something
break;
case IDCANCEL:
// Do something
break;
}

это будет работа!

0
По вопросам рекламы [email protected]