2011-12-27 3 views
3

Я просто хочу спросить, есть простой способ в C++, чтобы сделать диалоговые окна (OpenFileDialog, SaveFileDialog), чтобы записать так:Создание диалоговых окон

' VB6 Example  
'Setting up the "open file" dialog box. 
openDiag.DialogTitle = "Select a file to open" 
openDiag.Filter = "Exe files | *.exe" 'Ensures only EXE files can be selected. 
openDiag.ShowOpen 'Opens up the dialog 
'Takes the filename that was selected in the dialog and stores it in your OpenPath var and 
'also displays it in the textbox 
openPath = openDiag.FileName 
txtfilepath.Text = openPath 

Я предполагаю, что я должен был бы использовать Классы, но я действительно не знаю, как писать такой код.

Любая помощь будет очень признательна!

@@@ FINAL EDIT @@@

Это кажется, что этот код не компилируется при вставке в WIN32 проекте в VS 2010.

дает мне эти ошибки:

error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'ofn' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'OFN_EXPLORER' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'OFN_FILEMUSTEXIST' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'OFN_HIDEREADONLY' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'OPENFILENAME' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2065: 'OPENFILENAME' : undeclared identifier c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2070: ''unknown-type'': illegal sizeof operand c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2070: ''unknown-type'': illegal sizeof operand c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2146: syntax error : missing ';' before identifier 'ofn' c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2228: left of '.Flags' must have class/struct/union c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2228: left of '.hwndOwner' must have class/struct/union c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2228: left of '.lpstrDefExt' must have class/struct/union c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2228: left of '.lpstrFile' must have class/struct/union c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2228: left of '.lpstrFilter' must have class/struct/union c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2228: left of '.lpstrTitle' must have class/struct/union c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2228: left of '.lStructSize' must have class/struct/union c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
error C2228: left of '.nMaxFile' must have class/struct/union c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
IntelliSense: identifier "OFN_EXPLORER" is undefined c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
IntelliSense: identifier "OFN_FILEMUSTEXIST" is undefined c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
IntelliSense: identifier "OFN_HIDEREADONLY" is undefined c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
IntelliSense: identifier "OPENFILENAME" is undefined c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
IntelliSense: identifier "OPENFILENAME" is undefined c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 
IntelliSense: too many arguments in function call c:\documents and settings\User\my documents\visual studio 2010\projects\program\program\program.cpp 

Любые предложения по устранению этой ошибки?

EDIT:

Найдено это сам ...

Необходимо, чтобы включить

#include <Commdlg.h> 

ответ

2

В C (или C++) вы создадите экземпляр OPENFILENAME structure и установите его элементы. Это очень похоже на то, что вы показали в приведенном выше примере кода VB 6.

Связанная документация содержит информацию о том, что все различные члены этой структуры означает, и как вы должны заполнить их, но большинство из них совпадают с тем, что вы можете найти в VB 6.

Например:

OPENFILENAME ofn; 
ofn.lpstrTitle = TEXT("Select a file to open"); 
ofn.lpstrFilter = TEXT("EXE files\0*.exe\0"); 
/* etc... */ 

Волшебство приходит, когда вы установили все свойства и готовы к показать диалог. В отличие от VB 6, где структура данных предоставляет функцию, которая показывает диалог (ShowOpen), в C/Win32, для этого вам нужно вызвать другую функцию.

Функция, которая вас интересует, это GetOpenFileName, и она принимает один аргумент - указатель на вашу структуру OPENFILENAME. Элементы этой структуры используются для инициализации диалогового окна, а функция также заполняет элементы структуры информацией о файле, который выбран пользователем. Возвращаемое значение функции указывает, указал ли пользователь имя файла и нажал кнопку «ОК» (ноль), или пользователь нажал «Отмена» или произошла ошибка (ноль FALSE).

Полный пример кода here, но упрощенная версия такова:

TCHAR szFileName[MAX_PATH]; /* string buffer to hold name of the selected file */ 

OPENFILENAME ofn = {0}; 
ofn.lStructSize = sizeof(ofn); 
ofn.hwndOwner = hWnd;  /* a handle to your window that will own the dialog */ 
ofn.lpstrFile = szFileName; 
ofn.nMaxFile = MAX_PATH; 
ofn.lpstrTitle = TEXT("Select a file to open"); 
ofn.lpstrFilter = TEXT("EXE files\0*.exe\0"); 
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 
/* etc... */ 

/* Show the dialog. */ 
if (!GetOpenFileName(&ofn)) 
{ 
    /* Either the user clicked Cancel, or an error occurred. 
    * You need to handle it here... */ 
} 
else 
{ 
    /* The user selected a file and clicked OK. 
    * The name and path to the file is contained in the szFileName buffer. */ 

    MessageBox(NULL, szFileName, TEXT("You selected the file..."), MB_OK); 
} 

Да, некоторые вещи по этому поводу отличаются от VB 6.Например, C не имеет встроенного строкового типа, что усложняет код для кода. Если вы смущены приведенным выше примером кода, я очень советую вам изучить язык C, прежде чем пытаться изучить Win32 API. Вещи будут идти много более плавно, и вы не будете почти потеряны.

+0

Спасибо вам за ответ! Но как я могу изменить кнопку «Открыть» на кнопку «Сохранить»? (Я знаю, как сохранить файл, как изменить имя кнопки - все, что я прошу сейчас) –

+1

@Buxme: Это другая функция. Вместо 'GetOpenFileName' вы хотите [' GetSaveFileName'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646928.aspx). Тем не менее, структура 'OPENFILENAME' используется обеими функциями. –

+0

Спасибо вам большое! Работает ! –

0

Вам не нужно использовать классы, на самом деле вы даже не нужно использовать C++. Win32 предоставляет GetOpenFileName, который выполняет весь тяжелый подъем для вас.

0

C++ не содержит графических библиотек, поэтому наличие диалогового окна не имеет никакого смысла. Пожалуйста, обратитесь к документам любых библиотек графического интерфейса, которые вы используете.

+2

а именно, win32 api –

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