我有用 XCode 撰寫的 C 控制臺應用程式,我需要打開一個檔案選擇器對話框。為此,我將 Cocoa 與 Objective-c 結合使用。我正在嘗試打開一個 NSOpenPanel 以將其用于此目的。我目前正在使用以下代碼:
const char* openDialog()
{
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setFloatingPanel:YES];
if ( [openDlg runModal] == NSOKButton )
{
for( NSURL* URL in [openDlg URLs] )
{
NSLog( @"%@", [URL path] );
return [URL.path UTF8String];
}
}
return NULL;
}
這有效,但是創建的檔案選擇器不能正確接受滑鼠和鍵盤事件。這很難解釋,但例如,當我在視窗上方懸停時從 XCode 運行代碼時,滑鼠仍然表現得好像在 XCode 中一樣,顯示插入符號。當我從終端運行應用程式時,只要我輸入內容,它就會將輸入發送到終端,即使檔案選擇器在“前面”。但是,單擊命令會將滑鼠事件正確地傳遞給檔案選擇器。
我查看了 NSOpenPanel 的檔案并廣泛地搜索了這個問題,但我找不到答案。
uj5u.com熱心網友回復:
/*
To run in Terminal: clang openpanel.m -fobjc-arc -framework Cocoa -o openpanel && ./openpanel
*/
#import <Cocoa/Cocoa.h>
int main() {
NSApplication *application = [NSApplication sharedApplication];
[application setActivationPolicy:NSApplicationActivationPolicyAccessory];
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setFloatingPanel:YES];
if ( [openDlg runModal] == NSModalResponseOK ) {
for( NSURL* URL in [openDlg URLs] ) {
NSLog( @"%@", [URL path] );
}
}
return 0;
}
感謝@Willeke。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/358471.html
上一篇:XAML編輯器中的“訪問路徑'C:\ProgramFiles(x86)\Microsoft\VisualStudio\2019\Community\Common7\IDE\L
下一篇:如果沒有找到與搜索值匹配的行
