从 Vis C++ 控制台应用程序打开 OpenDialog?
Posted
技术标签:
【中文标题】从 Vis C++ 控制台应用程序打开 OpenDialog?【英文标题】:Opening an OpenDialog from Vis C++ console app? 【发布时间】:2009-01-18 08:21:44 【问题描述】:我知道这是一个非常简单的问题,但我非常习惯使用 Borland 和包装器,所以这对我来说是一种新方法。有人可以简单地告诉我如何打开仅从 Visual Studio C++ 控制台应用程序获取 .obj 文件的 OpenDialog 吗?
非常感谢!
【问题讨论】:
我不确定我是否理解你的问题,如果它更清楚一点,你可能会得到更好的回答。如果它是控制台应用程序而不是 Windows 应用程序,我认为您将无法打开 OpenDialog。 【参考方案1】:控制台应用程序和 GUI 应用程序之间实际上没有任何区别,除了入口点(“GUI”应用程序中的 WinMain),如果不是从控制台。
所有的Win32 API都可用,所以需要使用GetOpenFileName调用,如下:
#define DEFAULT_EXTENSION L".obj"
OPENFILENAME ofn;
wchar_t *FilterSpec =L"Object Files(*.obj)\0*.obj\0Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0";
wchar_t *Title =L"Open....";
wchar_t szFileName[MAX_PATH];
wchar_t szFileTitle[MAX_PATH];
int Result;
wchar_t filePath[MAX_PATH]; // Selected file and path
*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 = L"."; // 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; // Failed or cancelled
else
wcscpy_s(filePath,ofn.lpstrFile);
【讨论】:
在对代码进行了一些修改之后,确实如此!非常感谢!【参考方案2】:是的,可以从 VC++ 控制台应用程序打开 OpenDialog。
步骤: 创建一个新项目。 -> 选择 Win32 控制台应用程序。 在下一个对话框中,选择“支持 MFC 的应用程序”。 您将获得以下代码:
#include "stdafx.h" #include "test.h"
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE 静态字符 THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////// ////////////////////////// // 唯一的应用程序对象
CWinApp theApp;
使用命名空间标准;
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”以获得更多帮助。
【讨论】:
不是每个人都希望在他们的应用程序中使用 MFC - 尤其是控制台应用程序!此外 - 现有应用程序可能不太容易转换为 mfc...【参考方案3】:在 Visual Studio 中,通常依赖于MFC's CFileDialog class。查看链接的 MSDN 文档页面以了解示例用法。这个页面也有some examples。
如果您使用的是 Windows Vista 或 Windows 7,您可以尝试新的 COM 接口IFileOpenDialog。 Kenny Kerr 有一个nice article 使用新的 Vista 对话框。
【讨论】:
不是每个人都希望在他们的应用程序中使用 MFC - 尤其是控制台应用程序! 有道理。请改用 GetOpenFileName() api 调用。 msdn.microsoft.com/en-us/library/ms646829(VS.85).aspx以上是关于从 Vis C++ 控制台应用程序打开 OpenDialog?的主要内容,如果未能解决你的问题,请参考以下文章
需要 Microsoft Visual C++ 14.0。使用“Microsoft Visual C++ 构建工具”获取它:http://landinghub.visualstudio.com/vis