我需要一个非常简单的警报框,例如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/