2010-12-02 6 views
0

我用C++編寫,並與海灣合作委員會建立了一個命令行應用程序/做出在MacOS上運行。此應用程序沒有自己的GUI,它不應該有任何根窗口 - 它是一個控制檯應用程序,旨在由另一個應用程序控制。wxWidgets的命令行/ GUI混合式應用程序無法獲取對話框輸入

然而,有必要在一個點上,這使它成爲一個有點混合的顯示一個文件選擇對話框。

我使用的wxWidgets創建對話框,但未能得到輸入。我已經在各種常見問題解答和用戶組中看到可能需要捆綁軟件。當我試圖創建一個包時,它並沒有解決問題。

這裏的wxWidgets的是如何初始化:

#ifdef __WXMAC__ 
    if (!wxEntryStart(argc, argv)) 
    { 
     cout << "Failed to initialize wxWidgets." << endl; 
     return 0; 
    } 
#endif 
    clientApp = new MainClass(); 
    clientApp->Run(argc, argv); 
#ifdef __WXMAC__ 
    wxEntryCleanup(); 
#endif 

當我試圖表明一個瀏覽文件對話框,使用此代碼,它顯示了文件選擇器,但沒有反應,像個它沒有消息泵:

#ifdef __WXMAC__ 
    wxFileDialog* dlg = new wxFileDialog(NULL, _("Upload File"), _(""), _(""), 
     _("All Files (*.*)|*.*"), wxFD_OPEN|wxFD_FILE_MUST_EXIST); 
    if (dlg->ShowModal() == wxID_CANCEL) 
    { 
     INFOLOG("File upload dialog has been cancelled." << endl) 
     return false; 
    } 
#endif 

由於常見問題解答說創建捆綁包是一種自動創建消息泵並使GUI響應的方法。我試圖創建一個包:

myapp.app - >目錄 - >的MacOS - > MyApp的(可執行文件) - > cert.crt(由應用使用SSL證書) - >資源 - > myapp.icns - >的Info.plist(點OT MYAPP爲可執行,並使用myapp.icns爲圖標)

應用控制,這不是一個我擁有控制權,並擁有在運行正是這樣:

MYAPP

控制應用程序需要讀取此應用程序的控制檯輸出,這主要是爲什麼這是一個控制檯的應用程序。

由於該可執行文件是幾個目錄深,我試圖創建在根目錄下的捆綁運行應用程序之上的shell腳本,並調用它的myapp。 Myapp只運行myapp.app/Contents/MacOS/myapp,轉發命令行參數。

這沒有奏效。瀏覽文件窗口被創建並且坐在那裏,每當我將鼠標懸停在它上面時,就會給我彩虹旋鈕。

我可以做些什麼來獲得消息泵?有沒有可以添加到wxWidgets代碼的調用,還是需要對該軟件包進行不同的操作?是否讓shell腳本啓動捆綁軟件內的應用程序完全打敗了捆綁軟件應該提供的「消息泵魔法」,如果有的話,是否有明智的解決方法?我是否需要爲wxFileDialog創建某種僞父項?

回答

1

我聽說有報道說創建一個應用程序包的替代方法是使用下面的代碼(我從來不會向任何人推薦一個包,但聽起來像你的情況是使用它的一個很好的理由):

#include <ApplicationServices/ApplicationServices.h> 

ProcessSerialNumber PSN; 
GetCurrentProcess(&PSN); 
TransformProcessType(&PSN,kProcessTransformToForegroundApplication); 

這當然是平臺特定的,所以相應地包裝它。

你有一個派生wxApp和wxApp ::的OnInit()?這些可能仍然需要初始化事件循環。

+0

原來,這足以讓我走上正軌。我需要一個OnInit(),然後需要在我的主線程中調用OnRun()(必須將一些主線程的東西移動到後臺線程,但它最終會工作)。謝謝。 – 2010-12-07 22:12:14

1

你可以讓你的應用程序成爲一個完整的GUI應用程序,只需使用wxWindow :: Show(false)隱藏主窗口即可。這會給你你的工作消息泵。你應該仍然可以捕捉stdout和stderror。

+0

不是我在這裏所需要的,但謝謝你的提示,可能在未來有用。 :) – 2010-12-07 22:12:58

相關問題