Открытие OpenDialog из консольного приложения Vis C ++? - PullRequest
3 голосов
/ 18 января 2009

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

Это очень ценится!

Ответы [ 3 ]

5 голосов
/ 18 января 2009

Между консольным приложением и приложением с графическим интерфейсом нет никакой разницы, за исключением точки входа (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);
}
2 голосов
/ 18 января 2009

Да, можно открыть 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 (); * +1029 *

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

0 голосов
/ 18 января 2009

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

Если вы используете Windows Vista или Windows 7, вы можете попробовать новый интерфейс COM IFileOpenDialog . У Кенни Керра есть хорошая статья об использовании новых диалоговых окон Vista.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...