从Vis C ++控制台应用程序打开OpenDialog?

时间:2009-01-18 08:21:45

标签: c++ visual-studio-2008 visual-c++

我知道这是一个非常简单的问题,但我很习惯使用Borland和包装器,所以这对我来说是一种新方法。有人可以简单地告诉我如何打开一个只从Visual Studio c ++控制台应用程序获取.obj文件的OpenDialog?

非常感谢!

3 个答案:

答案 0 :(得分:5)

控制台应用程序和GUI应用程序之间没有任何区别,除了入口点(“GUI”应用程序中的WinMain),并且控制台应用程序将在启动期间打开控制台窗口,如果不是从控制台。

所有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);
}

答案 1 :(得分:2)

是的,可以从VC ++控制台应用程序打开OpenDialog。

步骤: 创建一个新项目。 - >选择Win32控制台应用程序。 在下一个对话框中,选择“支持MFC的应用程序”。 您将获得以下代码:

#include“stdafx.h”
#include“test.h”

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE [] = __FILE__;
#ENDIF

/////////////////////////////////////////////// ////////////////////////////// //唯一的应用程序对象

CWinApp theApp;

使用namespace std;

int _tmain(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;

}

在“else”部分

的开头添加以下代码

CFileDialog dlgOpen(TRUE,NULL,NULL,OFN_OVERWRITEPROMPT,“文本文件( .txt)| .txt ||”); dlgOpen.DoModal();

运行该应用程序。将自动打开一个打开的对话框。谷歌“CFileDialog”提供进一步的帮助。

答案 2 :(得分:0)

在Visual Studio中,通常依赖MFC's CFileDialog class。查看链接的MSDN文档页面以获取样本用法。此页面也有some examples

如果您使用的是Windows Vista或Windows 7,则可以尝试新的COM接口IFileOpenDialog。 Kenny Kerr使用新的Vista对话框nice article