我知道這是一個簡單的問題,但我非常習慣於使用Borland和包裝器,所以這對我來說有點新意。有人可以簡單地告訴我如何打開一個OpenDialog,它只從Visual Studio C++控制檯應用程序獲取.obj文件?從Vis C++控制檯應用程序打開OpenDialog?
非常感謝!
我知道這是一個簡單的問題,但我非常習慣於使用Borland和包裝器,所以這對我來說有點新意。有人可以簡單地告訴我如何打開一個OpenDialog,它只從Visual Studio C++控制檯應用程序獲取.obj文件?從Vis C++控制檯應用程序打開OpenDialog?
非常感謝!
除了入口點('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);
}
經過一番亂七八糟的代碼後,那沒有呃!非常感謝! – Cyprus106 2009-01-18 15:41:35
在Visual Studio中,通常依賴於MFC's CFileDialog class。查看鏈接的MSDN文檔頁面以獲取示例用法。此頁面也有some examples。
如果您使用Windows Vista或Windows 7,則可以嘗試新的COM接口IFileOpenDialog。 Kenny Kerr在使用新的Vista對話框時有一個nice article。
不是每個人都想在他們的應用程序中使用MFC - 尤其是控制檯應用程序! – Tim 2009-05-04 19:58:29
有道理。 改爲使用GetOpenFileName()api調用。 http://msdn.microsoft.com/en-us/library/ms646829(VS.85).aspx – 2009-05-05 20:07:32
是的,它可以從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」獲得進一步的幫助。
我不確定我是否理解你的問題,如果它有點清楚,你可能會得到更好的答案。如果它是一個控制檯應用程序而不是Windows應用程序,我認爲你不能打開OpenDialog。 – Tom 2009-01-18 08:36:20