WindowsAPI(Win32API) Advent Calendar 2015 3日目
WindowsAPI(Win32API) Advent Calendar 2015 - Adventar
GetOpenFileNameは、"ファイルを開く"というタイプのファイル選択ダイアログを表示するWindowsAPI・・・。
OPENFILENAME構造体変数にパラメータをセットして、アドレスをこの関数に渡すと、"ファイルを開く"ダイアログが出て、ファイルを選べる・・・。
ファイルを選択したら、lpstrFileメンバにファイルパス文字列セットされるので、後はCreateFileなどでファイルを開いて表示することができる・・・。
resource.hに、
GetOpenFileName.rcに、
メニュー項目Open(ID_FILE_OPEN)とエディットボックスのリソースID(ID_EDIT1)を用意しておく・・・。
エディットボックスは前回のように、
CreateWindowで作って、そこにID_EDIT1をセット・・・。
WM_SIZEも、
前回と同じ・・・。
Openが選択された時、
まず、OPENFILENAME構造体変数ofnに値をセット・・・。
ofnやtszFilePathは{0}で初期化しておくこと・・・。
lpstrFilterは、表示するファイルをワイルドカードでフィルタリングするあれ・・・。
"\0"区切りでフィルタリストを指定する・・・。
拡張子がtxtなら"*.txt"、全てのファイルなら"*.*"・・・。
最後のところは"\0\0"とする・・・。
FlagsのOFN_FILEMUSTEXISTは、選択したファイルが存在しない場合にメッセージが出て、選択が無効になり、ファイル選択ダイアログが表示されたままの状態になる・・・。
GetOpenFileNameにofnを渡す・・・。
キャンセルを押したり、閉じたりするとFALSEが返るので、そういう場合はそこで処理を終わりにしてしまう・・・。
lpstrFileにはtszFilePathのアドレスを渡していると思うが、そのtszFilePathに選択したファイルパスが格納されるので、あとはそのパスのファイルを開いて、読み込んで、エディットボックスにセット・・・。
これでちょっとしたテキストエディタの"ファイルを開く"部分はできた・・・。
こんなtest.txtだとして、
最初この状態・・・。
メニュー項目Openを選択・・・。
"開く"ダイアログが出る・・・。
test.txtを選択・・・。
エディットボックスに中身が表示された・・・。
Sample/GetOpenFileName.cpp at master · bg1bgst333/Sample · GitHub
Sample/resource.h at master · bg1bgst333/Sample · GitHub
Sample/GetOpenFileName.rc at master · bg1bgst333/Sample · GitHub