Я использую приложение 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.
Кроме того, я могу выбрать значок для окна сообщения? Вопрос по этому делу.
Ну вот. Вы должны использовать широкие символы в вызове 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);
Вы должны прочитать документацию для Окно сообщения.
У меня нет опыта работы с 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» в Варианты проекта)
Для получения дополнительной информации см. Вот
Я не уверен, как это сделать в C ++ Building, но вам нужно включить, я думаю, что-то вроде многобитных символов, но вам нужно проверить документацию с помощью вашего компилятора.
Все, что написано выше, вероятно, устарело для 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;
}
это будет работа!