我需要一个非常简单的警报框,例如NSRunAlertPanel(),但这是针对C++嵌入式64位应用程序的,我不知道Cocoa还是Objective-C。

有关如何执行此操作的任何想法?

最佳答案

选项A

一种解决方案是查看CFUserNotification API。

选项B

另一种选择是使用CoreFoundation类型作为参数包装NSRunAlertPanel:

// 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类型是桥接的)。

关于c++ - C++中的简单警报框,而不是Objective-C,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8094145/

10-13 07:00