2009-01-18 63 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”获得进一步的帮助。

相关问题