Простое окно оповещения в C ++, а не Objective-C - PullRequest
2 голосов
/ 11 ноября 2011

Мне нужно очень простое окно оповещения, например NSRunAlertPanel(), но это для встроенного 64-разрядного приложения на C ++, и я не знаю ни Какао, ни Objective-C.

Есть идеи, как это сделать?

1 Ответ

2 голосов
/ 11 ноября 2011

Вариант 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 являются мостовыми).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...