Открытие OpenDialog из консольного приложения Vis C++?

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

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

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

Tom 18.01.2009 11:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
5 782
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

не все хотят иметь MFC в своем приложении, особенно в консольном приложении!

Tim 04.05.2009 23:58

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

Filip Frącz 06.05.2009 00:07
Ответ принят как подходящий

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

после некоторой возни с кодом, это сработало! Большое спасибо!

Cyprus106 18.01.2009 18:41

Да, можно открыть 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 ...

Tim 04.05.2009 23:58

Другие вопросы по теме