OpenFileDialog,SaveFileDialogは共にSystem::Windows::Forms名前空間にある。
プロジェクトの初期設定によってはSystem.Windows.Forms.dllを明示的に#usingしなければならないかもしれない。
OKボタンが押されたかの判定はOK定数を使うが、System::Windows::Forms::DialogResult::OKでenum classされている。場所がわからないと詰まるので注意したい。
またこれらの関数はアプリケーションのカレントディレクトリを変更してしまうので、カレントディレクトリを維持したい場合はRestoreDirectory = trueを指定する。
using namespace System; //本来これが必要。コンソールプロジェクトの場合は明示する必要がある #using <System.Windows.Forms.dll> ///////////////////////////////////////////////// //ファイルを開くダイアログ void Open_File_Dialog(){ System::Windows::Forms::OpenFileDialog^ ofd = gcnew System::Windows::Forms::OpenFileDialog(); ofd->Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*"; ofd->FilterIndex = 1;//初期状態でtxtが選択される ofd->Title = "テキストファイルを開く";//ダイアログのタイトル ofd->RestoreDirectory = true;//ダイアログの使用によってカレントディレクトリが変更されないようにする if (ofd->ShowDialog() == System::Windows::Forms::DialogResult::OK){ Console::WriteLine( ofd->FileName ); } } ///////////////////////////////////////////////////////////////////////// //ファイルを保存ダイアログ void Save_FileDialog(){ System::Windows::Forms::SaveFileDialog^ sfd = gcnew System::Windows::Forms::SaveFileDialog(); sfd->FileName = "default.jpg"; sfd->InitialDirectory = "C:\\"; sfd->Filter = "PNGファイル(*.png)|*.png|JPGファイル(*.jpeg;*.jpg)|*.jpeg;*.jpg|すべてのファイル(*.*)|*.*"; sfd->FilterIndex = 2;//初期状態でjpgが選択される sfd->Title = "画像ファイルを保存";//ダイアログのタイトルを設定する sfd->RestoreDirectory = true;//ダイアログの使用によってカレントディレクトリが変更されないようにする //ダイアログを表示する if (sfd->ShowDialog() == System::Windows::Forms::DialogResult::OK) { //OKボタンがクリックされたとき、選択されたファイル名を表示する Console::WriteLine(sfd->FileName); } } /////////////////////////////////////////////////// //エントリーポイント [STAThread] int main(array<System::String ^> ^args) { Open_File_Dialog(); Save_FileDialog(); Console::Read();//待機 return 0; }