我用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創建某種僞父項?
原來,這足以讓我走上正軌。我需要一個OnInit(),然後需要在我的主線程中調用OnRun()(必須將一些主線程的東西移動到後臺線程,但它最終會工作)。謝謝。 – 2010-12-07 22:12:14