Вариант A
Одним из решений будет рассмотрение CFUserNotification
API.
Вариант B
Другой вариант - обернуть NSRunAlertPanel
, используя типы CoreFoundation в качестве параметров:
// MONNSRunAlertPanel.hpp
extern "C++" {
int MONNSRunAlertPanel(CFStringRef title,
CFStringRef msg,
CFStringRef defaultButton,
CFStringRef alternateButton,
CFStringRef otherButton);
}
// MONNSRunAlertPanel.mm
#include <Foundation/Foundation.h>
#include "MONNSRunAlertPanel.hpp"
int MONNSRunAlertPanel(CFStringRef title,
CFStringRef msg,
CFStringRef defaultButton,
CFStringRef alternateButton,
CFStringRef otherButton) {
int result = 0;
@autoreleasepool {
result = NSRunAlertPanel(
(NSString *)title,
(NSString *)msg,
(NSString *)defaultButton,
(NSString *)alternateButton,
(NSString *)otherButton
);
}
return result;
}
Если вы хотите использовать символ C, назовите файл MONNSRunAlertPanel.m (objc) и измените заголовок соответственно,
Если вы хотите использовать его в качестве символа C ++, просто назовите файл MONNSRunAlertPanel.mm (objc ++).
Если вы используете настройку компилятора по умолчанию, наш исходный код будет скомпилирован на основе его расширения файла.
Наконец, добавьте Foundation и AppKit для связи с необходимыми системными библиотеками.
Затем вы можете вызывать MONNSRunAlertPanel, не перетаскивая Foundation.framework в ваши источники C ++ (потому что типы CFString и NSString являются мостовыми).