>>703
ええと・・・WCHARで Unicode のまま WCHAR* szFaceName 状態の変数に "MS UI Gothic" なんて文字列を入れても、
CFontDialog 自体が読み取れる変数は Unicode じゃなくて MultiByte文字らしくて、WCHAR*な "MS UI Gothic" が認識されないというか・・・

  CHARFORMAT cf;
  cf.cbSize    = 10;
  cf.dwMask   = CFM_FACE;
  lstrcpy( cf.szFaceName, CString("MS UI Gothic") ); // 実際にはシステムから受けた WCHAR[] な変数のフォント名がszFaceNameにコピーされる

#if (defined (UNICODE) || defined (_UNICODE))
  char strFontName[LF_FACESIZE]="";
  WideCharToMultiByte(CP_ACP, 0, cf.szFaceName, -1, strFontName, LF_FACESIZE, NULL, NULL);
  strcpy( (char*)cf.szFaceName, strFontName );
#endif

CFontDialog dlg(cf);

今はこんな感じになっています。
Unicodeでコンパイルするとき #if の中で書かれているヤツが抜けていると今回のように。
Dlg.DoModal() の後 dlg.GetCharFormat(cfsave) で cfsave を保持しといたとして、
もう一度 cfsave で CFontDialog を作ると、フォント名の欄が空になってる(Unicodeに変換されたフォント名に該当するフォントが無い)・・・と。

>>704
サンクス
とりあえずはこのまま条件で分けときます。