ファイルダイアログメモ

やっつけで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

ちょっと改造