Я знаю, что это чертовски простой вопрос, но я очень привык использовать Borland и обертки, поэтому для меня это немного новый подход. Может ли кто-нибудь просто сказать мне, как я могу открыть OpenDialog, который получает только файлы .obj из консольного приложения Visual Studio C++?
Это очень ценится!





В Visual Studio обычно используется Класс CFileDialog MFC. Взгляните на связанную страницу документации MSDN для примера использования. На этой странице также есть несколько примеров.
Если вы используете Windows Vista или Windows 7, вы можете попробовать новый COM-интерфейс IFileOpenDialog. У Кенни Керра есть хорошая статья при использовании новых диалогов Vista.
не все хотят иметь MFC в своем приложении, особенно в консольном приложении!
Имеет смысл. Вместо этого используйте вызов API GetOpenFileName (). msdn.microsoft.com/en-us/library/ms646829(VS.85).aspx
На самом деле нет никакой разницы между консольным приложением и приложением с графическим интерфейсом пользователя, за исключением точки входа (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);
}
после некоторой возни с кодом, это сработало! Большое спасибо!
Да, можно открыть OpenDialog из консольного приложения VC++.
Шаги: Создайте новый проект. -> выберите Консольное приложение Win32. В следующем диалоговом окне выберите «Приложение, поддерживающее MFC». вам будет предоставлен следующий код:
#include "stdafx.h"
#include "test.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
статический символ THIS_FILE [] = __FILE__;
#endif
////////////////////////////////////////////////// /////////////////////////// // Единственный объект приложения
CWinApp theApp;
используя пространство имен 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 ();
Запустите приложение. Открытый диалог откроется автоматически. Google "CFileDialog" за дополнительной помощью.
не все хотят иметь MFC в своем приложении, особенно в консольном приложении! Кроме того, существующее приложение может быть не так просто преобразовать в mfc ...
Я не уверен, что понимаю ваш вопрос, вы можете получить более качественные ответы, если он будет немного яснее. Если это консольное приложение, а не приложение для Windows, я не думаю, что вы сможете открыть OpenDialog.