我知道这是一个简单的问题,但我非常习惯于使用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