2009-01-18 3 views
3

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

Очень ценный!

+0

Я не уверен, что я понимаю ваш вопрос, вы можете получить более качественные ответы, если это будет немного яснее. Если это консольное приложение, а не приложение для Windows, я не думаю, что вы сможете открыть OpenDialog. – Tom

ответ

5

Разница между консольным приложением и графическим приложением отсутствует, за исключением точки входа (WinMain в приложении «GUI»), а консольное приложение будет иметь консольное окно, открытое во время запуска, если не начато с консоль.

Весь API Win32 доступен, так что вы должны использовать 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

после некоторого возиться с кодом, который сделал «er! Большое спасибо! – Cyprus106

0

В Visual Studio обычно полагается на MFC's CFileDialog class. Взгляните на связанную страницу документации MSDN для использования образца. На этой странице также есть some examples.

Если вы используете Windows Vista или Windows 7, вы можете попробовать новый COM-интерфейс IFileOpenDialog. У Kenny Kerr есть nice article с использованием новых диалогов Vista.

+0

Не каждый хочет иметь MFC в своем приложении - особенно консольное приложение! – Tim

+0

Имеет смысл. Вместо этого используйте вместо этого api-вызов GetOpenFileName(). http://msdn.microsoft.com/en-us/library/ms646829(VS.85).aspx –

2

Да можно открыть OpenDialog из VC++ консольного приложения.

Шаги: Создайте новый проект. -> выберите консольное приложение Win32. В следующем диалоговом окне выберите «Приложение, поддерживающее MFC». вы будете обеспечены следующим кодом:

#include "stdafx.h"
#include "test.h"

#ifdef _DEBUG
#define новый DEBUG_NEW
#undef THIS_FILE
static char 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; 

}

Добавьте следующий код в начале из "еще" часть

CFileDialog dlgOpen (TRUE, NULL, NULL, OFN_OVERWRITEPROMPT, "Текстовые файлы (.txt) |. TXT || "); dlgOpen.DoModal();

Запустить приложение. Открытое диалоговое окно будет открыто автоматически. Google «CFileDialog» для дальнейшей помощи.

+0

не все хотят иметь MFC в своем приложении - особенно консольное приложение! Кроме того - существующее приложение может быть не так легко конвертировать в mfc ... – Tim

Смежные вопросы