Как отобразить модальное окно сообщения в С++ на Mac?

CFUserNotificationDisplayAlert и CFUserNotificationDisplayNotice создает немодальное окно и это плохо, потому что это может привести пользовательский интерфейс вашего приложения в очень нежелательное состояние, если вы выберете исходное окно приложения (окно сообщения скрыто, но приложение не отвечает).

Старый SystemAlert был модальным, но этот не полностью поддерживает строки Unicode.

Как я могу отобразить окно сообщения в виде модального окна под Mac? Я ищу что-то похожее на MessageBox из Windows?


person sorin    schedule 13.01.2010    source источник


Ответы (3)


Я реализовал его с помощью CFUserNotificationDisplayAlert, и он не возвращается, пока пользователь не закроет MessageBox.

Если вы хотите взглянуть на код, он у меня есть в функция MessageBox в Mac там вы найдете функцию MessageBox, реализованную для Mac, она реализована только для MB_OKCANCEL, но с небольшим количеством кода можно было бы охватить все флаги MessageBox и возвращаемые значения, это хорошая отправная точка.

person Jorge Arimany    schedule 05.05.2010

Похоже, что CreateStandardAlert является правильным решением, потому что оно модальное.


DialogRef theItem;
DialogItemIndex itemIndex;
CreateStandardAlert(kAlertNoteAlert, CFSTR("aaa"), CFSTR("bbb"), NULL, &theItem);
RunStandardAlert(theItem, NULL, &itemIndex);
person sorin    schedule 13.01.2010
comment
Эта функция доступна только для 32-разрядных приложений и недоступна для 64-разрядных приложений. См. здесь: developer.apple.com/legacy/mac/library/documentation/Carbon/ - person Trevor; 07.03.2013

Взгляните на функцию NSBeginAlertSheet или на NSApp:

- (void)beginSheet:(NSWindow *)sheet modalForWindow:(NSWindow *)docWindow
      modalDelegate:(id)modalDelegate didEndSelector:(SEL)didEndSelector contextInfo:(void *)contextInfo

может быть, это то, что вы хотите. Вот тоже хорошая статья о работе с листами.

person Vladimir    schedule 13.01.2010