OPENFILENAME構造体を渡す関数では、カレントディレクトリが変更される

メモとして書いておきます。基本VC.NETのソリューションなどで起動すると、カレントディレクトリがソリューションファイルと同じ位置になります。このカレントディレクトリを変更する方法があります。
SetCurrentDirectory関数です。この引数にフォルダの位置を渡してしまえばカレントディレクトリの位置を変更できます。なのでこの関数を使用しない限りは変更されない気がします。
しかし強制的に変更されてしまう関数があります。GetOpenFileNameやGetSaveFileNameです。
これはOPENFILENAME構造体を渡す関数なのですが、この関数を実行するとカレントディレクトリが選択したファイルの位置に変更されます。

そこで変更されない対策があります。OPENFILENAME構造体のフラグ変数にOFN_NOCHANGEDIRを追加すればよいのです。これは『ユーザーがファイルを検索してディレクトリを変更しても、 カレントディレクトリに復帰させるようにします。』と説明されています。
これをすれば現在のカレントディレクトリに復帰できます。逆に追加しなければ選択したファイルの位置になるので活用してください。