typedef struct tagOFN { // ofn DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; LPCTSTR lpstrFilter; LPTSTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; LPTSTR lpstrFile; DWORD nMaxFile; LPTSTR lpstrFileTitle; DWORD nMaxFileTitle; LPCTSTR lpstrInitialDir; LPCTSTR lpstrTitle; DWORD Flags; WORD nFileOffset; WORD nFileExtension; LPCTSTR lpstrDefExt; DWORD lCustData; LPOFNHOOKPROC lpfnHook; LPCTSTR lpTemplateName; } OPENFILENAME;lStructSize には、この構造体のサイズを指定します
定数 | 解説 |
---|---|
OFN_ALLOWMULTISELECT | 「ファイル名」リストボックスで複数選択を可能にする 専用テンプレートを用いてダイアログを作成する場合 「ファイル名」リストボックスの定義に LBS_EXTENDEDSEL 値を入れる このフラグを選択すると lpstrFile メンバが指すバッファに ディレクトリへのパスと、選択された全てのファイル名 そして、ファイル名の間はスペースで区切られ格納される OFN_EXPLORER フラグが設定されている場合は それぞれ NULL 文字で区切られ、連続した NULL 文字で終わる |
OFN_CREATEPROMPT | 現在存在しないファイルを作成するかを求めるプロンプトを表示する OFN_PATHMUSTEXIST と OFN_FILEMUSTEXIST フラグも含む |
OFN_ENABLEHOOK | lpfnHook で指定されたフック関数を有効にする |
OFN_ENABLETEMPLATE | hInstance が lpTemplateName メンバで指定された ダイアログテンプレートを含むリソースのインスタンスであることを示す |
OFN_ENABLETEMPLATEHANDLE | hInstance メンバがロード済みのダイアログボックステンプレートを含む メモリブロックを指していることを表す このフラグが指定されている場合、lpTemplateName は無視される |
OFN_EXPLORER | 新しいエクスプローラスタイルのダイアログボックスの カスタム化方法を用いることを示す |
OFN_FILEMUSTEXIST | 既存のファイル名しか入力を許さない OFN_PATHMUSTEXIST フラグも含む |
OFN_HIDEREADONLY | 「読み取り専用」チェックボックスを隠す |
OFN_LONGNAMES | 古いダイアログボックスのために、長いファイル名を用いる OFN_EXPLORER が設定されている場合は常に長い名前になる |
OFN_NOCHANGEDIR | ダイアログボックスは、現在のディレクトリを ダイアログボックスが呼び出された時のディレクトリに戻す |
OFN_NODEREFERENCELINKS | 選択されたショートカットファイル(.LNK)のパスとファイル名を 返すようにダイアログボックスに指示する |
OFN_NOLONGNAMES | 「ファイル名」リストボックスに長いファイル名を表示しない |
OFN_NONETWORKBUTTON | 「ネットワーク」ボタンを隠す |
OFN_NOREADONLYRETURN | 返されたファイルに対する「読み取り専用」チェックボックスに チェックマークを付けない |
OFN_NOTESTFILECREATE | ダイアログボックスを閉じる前にファイルを作成しない このフラグは、「変更不可で作成」ネットワーク共有ポイント上で ファイルを保存する場合に指定する |
OFN_NOVALIDATE | 無効な文字が入ったファイル名を有効とみなす |
OFN_OVERWRITEPROMPT | 保存時に選択されたファイルが存在する場合 メッセージボックスが表示され上書きをするか確認する |
OFN_PATHMUSTEXIST | 有効なパス及びファイル名でなければ入力を許さない |
OFN_READONLY | ダイアログの「読み取り専用」チェックボックスをチェックすることを表す |
OFN_SHAREAWARE | ネットワーク共有違反が原因で OpenFile() 関数呼び出しが失敗した場合に エラーを無視して所定のファイル名を返す このフラグが指定されている場合には SHAREVISTRING に対する 登録メッセージが lParam パラメータで指定されたパスおよびファイル名に対する NULL で終わる文字列のポインタと共にフック関数に送られる フック関数は次のいずれかで応答しなければならない OFN_SHAREFALLTHROUGH - ファイル名を表示する OFN_SHARENOWARN - アクションなし OFN_SHAREWARN - 標準警告メッセージを出す |
OFN_SHOWHELP | ヘルプボタンを表示する このフラグを設定する場合、親ウィンドウを持たなければならない |
#include <windows.h> #define TITLE TEXT("Kitty on your lap") LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) { static OPENFILENAME ofn = {0}; static TCHAR strFile[MAX_PATH] , strCustom[256] = TEXT("Before files\0*.*\0\0"); switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CREATE: ofn.lStructSize = sizeof (OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFilter = TEXT("Text files {*.txt}\0*.txt\0") TEXT("HTML files {*.htm}\0*.htm;*.html\0") TEXT("All files {*.*}\0*.*\0\0"); ofn.lpstrCustomFilter = strCustom; ofn.nMaxCustFilter = 256; ofn.nFilterIndex = 0; ofn.lpstrFile = strFile; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_FILEMUSTEXIST; return 0; case WM_RBUTTONUP: GetOpenFileName(&ofn); SetWindowText(hWnd , strFile); return 0; } return DefWindowProc(hWnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return -1; hwnd = CreateWindow( TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hwnd == NULL) return -1; while(GetMessage(&msg , NULL , 0 , 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
#include <windows.h> #define TITLE TEXT("Kitty on your lap") LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) { static OPENFILENAME ofn = {0}; static TCHAR strFile[MAX_PATH]; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CREATE: ofn.lStructSize = sizeof (OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrFilter = TEXT("Text files {*.txt}\0*.txt\0") TEXT("All files {*.*}\0*.*\0\0"); ofn.lpstrFile = strFile; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT; return 0; case WM_RBUTTONUP: GetSaveFileName(&ofn); SetWindowText(hWnd , strFile); return 0; } return DefWindowProc(hWnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { HWND hwnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return -1; hwnd = CreateWindow( TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hwnd == NULL) return -1; while(GetMessage(&msg , NULL , 0 , 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }このプログラムは、上のファイルを読み込むダイアログボックスのプログラムを改良したもので