ファイルダイアログメモ
やっつけでglutに仕込むのに使った。
Windowsでは常にGetOpenFileNameが使えるが、
X11では何が入っているか判らないのが悩ましかったり。
適当なインタプリタ的なものからダイアログを開いて標準出力から結果を受け取るのがお手軽だろう。
Xdialogを使ってみた。
#ifdef _MSC_VER #include <tchar.h> #pragma comment(lib, "Comdlg32.lib") #pragma comment(lib, "User32.lib") #else #include <stdio.h> #endif
std::string file; #ifdef _MSC_VER OPENFILENAME ofn; char path[MAX_PATH]; char name[MAX_PATH]; memset(path,'\0',sizeof(path)); memset(name,'\0',sizeof(name)); memset(&ofn,0,sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); //ofn.hwndOwner = hwnd; ofn.lpstrFile = path; ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle =name; ofn.nMaxFileTitle = MAX_PATH; //ofn.lpstrFilter = filter; //ofn.lpstrDefExt = def; ofn.lpstrTitle = "SELECT OPEN FILE"; ofn.Flags = OFN_FILEMUSTEXIST; if(GetOpenFileName(&ofn)){ file=ofn.lpstrFile; } #else FILE *fp=popen("Xdialog --stdout --fselect . 30 60", "r"); if(fp){ char buf[512]; fgets(buf, 512, fp); pclose(fp); char *end=buf; for(; *end!='\0'; ++end){ if(*end=='\n'){ break; } } file=std::string(buf, end); } #endif
ちょっと改造