2009-01-18 64 views
3

我知道這是一個簡單的問題,但我非常習慣於使用Borland和包裝器,所以這對我來說有點新意。有人可以簡單地告訴我如何打開一個OpenDialog,它只從Visual Studio C++控制檯應用程序獲取.obj文件?從Vis C++控制檯應用程序打開OpenDialog?

非常感謝!

+0

我不確定我是否理解你的問題,如果它有點清楚,你可能會得到更好的答案。如果它是一個控制檯應用程序而不是Windows應用程序,我認爲你不能打開OpenDialog。 – Tom 2009-01-18 08:36:20

回答

5

除了入口點('GUI'應用程序中的WinMain),控制檯應用程序和GUI應用程序之間沒有任何區別,並且控制檯應用程序將在啓動期間打開控制檯窗口一個控制檯。

所有的Win32 API是可用的,所以你需要使用GetOpenFileName通話,具體如下:

OPENFILENAME ofn; 
char *FilterSpec ="Object Files(*.obj)\0*.obj\0Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0"; 
char *Title ="Open...."; 
char szFileName[MAX_PATH]; 
char szFileTitle[MAX_PATH]; 
int    Result; 

*szFileName = 0; 
*szFileTitle = 0; 

/* fill in non-variant fields of OPENFILENAME struct. */ 
ofn.lStructSize  = sizeof(OPENFILENAME); 
ofn.hwndOwner   = GetFocus(); 
ofn.lpstrFilter  = FilterSpec; 
ofn.lpstrCustomFilter = NULL; 
ofn.nMaxCustFilter = 0; 
ofn.nFilterIndex  = 0; 
ofn.lpstrFile   = szFileName; 
ofn.nMaxFile   = MAX_PATH; 
ofn.lpstrInitialDir = "."; // Initial directory. 
ofn.lpstrFileTitle = szFileTitle; 
ofn.nMaxFileTitle  = MAX_PATH; 
ofn.lpstrTitle  = Title; 
ofn.lpstrDefExt = default_extension; 

ofn.Flags    = OFN_FILEMUSTEXIST|OFN_HIDEREADONLY; 

if (!GetOpenFileName ((LPOPENFILENAME)&ofn)) 
{ 
    return (-1); // Failed or cancelled 
} 
else 
{ 
    this->filename.Set(szFileName); 
} 
+0

經過一番亂七八糟的代碼後,那沒有呃!非常感謝! – Cyprus106 2009-01-18 15:41:35

0

在Visual Studio中,通常依賴於MFC's CFileDialog class。查看鏈接的MSDN文檔頁面以獲取示例用法。此頁面也有some examples

如果您使用Windows Vista或Windows 7,則可以嘗試新的COM接口IFileOpenDialog。 Kenny Kerr在使用新的Vista對話框時有一個nice article

+0

不是每個人都想在他們的應用程序中使用MFC - 尤其是控制檯應用程序! – Tim 2009-05-04 19:58:29

+0

有道理。 改爲使用GetOpenFileName()api調用。 http://msdn.microsoft.com/en-us/library/ms646829(VS.85).aspx – 2009-05-05 20:07:32

2

是的,它可以從VC++控制檯應用程序打開一個OpenDialog。

步驟: 創建一個新項目。 - >選擇Win32控制檯應用程序。 在下一個對話框中,選擇「支持MFC的應用程序」。 將爲您提供用下面的代碼:

的#include 「stdafx.h中」
的#include 「test.h」

的#ifdef _DEBUG
的#define DEBUG_NEW新
和#undef THIS_FILE
靜態字符THIS_FILE [] = __FILE__;
#ENDIF

////////////////////////////////////////// /////////////// //唯一的應用程序對象

CWinApp theApp ;

using namespace std; (int argc,TCHAR * argv [],TCHAR * envp []) { int nRetCode = 0; |

// initialize MFC and print and error on failure 
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) 
{ 
    // TODO: change error code to suit your needs 
    cerr << _T("Fatal Error: MFC initialization failed") << endl; 
    nRetCode = 1; 
} 
else 
{ 
    // TODO: code your application's behavior here. 
    CString strHello; 
    strHello.LoadString(IDS_HELLO); 
    cout << (LPCTSTR)strHello << endl; 
} 

return nRetCode; 

}

在 「其他」 部分

的CFileDialog dlgOpen(TRUE,NULL,NULL,OFN_OVERWRITEPROMPT,「文本文件(.TXT)的開頭添加以下代碼。 TXT ||「); dlgOpen.DoModal();

運行該應用程序。打開的對話框將自動打開。谷歌「CFileDialog」獲得進一步的幫助。

相關問題