UNICODE文字をプリンタ出力するには?

解決


kou1sakamoto  2003-08-04 20:47:09  No: 51899  IP: [192.*.*.*]

初めて書き込みさせて頂きます、坂本と申します。

VC++、win32APIについて全くの素人なのですが、仕事でVBからUNICODEを
プリンタ出力する必要性に迫られおり、色々調べて上記コードまで作成したのですが、うまく印刷されません(?に化けてしまう)

以下のようなコードを書いて、DLLとしてVBから呼び出しをしています。



// 唯一の CTestdll2App オブジェクト

CTestdll2App theApp;

void CTestdll2App::PrintUnicodeData()
{

  FILE *fp;          // ファイルポインタ
  wchar_t sFile[MAX_PATH];    // ファイルパス
  wchar_t sBuff[256 * 2];  
  wchar_t sBuffUni[256];

  HDC dcPrint;        // プリンタデバイスコンテキスト
  DOCINFO docInfo ;      // 印刷情報

  // 初期化
  memset(sBuff, 0x00, sizeof(sBuff));
  memset(sBuffUni, 0x00, sizeof(sBuffUni));

  /** ファイル読み込み **/
  wcscpy(sFile, L"unicode.txt" );    // 読込みファイルパス作成
  fp = _wfopen(sFile, L"rb");          // バイナリ読込みモードでファイルオープン
  if(NULL == fp){
    AfxMessageBox(L"ファイルオープンエラー");
    return;
  }
  fgetws(sBuffUni, sizeof(sBuffUni), fp);    // 1行読込み
  //fgets(sBuff, sizeof(sBuff), fp);
  fclose( fp );                // ファイルクローズ

  /** 印刷 **/

  dcPrint = CreateDC( L"WINSPOOL", L"\\\\nl2sv2\\HP1-LBP1810-1", NULL, 0);

  // 初期化
  memset( &docInfo, NULL, sizeof( DOCINFO ));

  StartDoc( dcPrint, &docInfo);      // 印字開始
  StartPage( dcPrint );          
  
  // TextOutWを使用してUnicode.txtから読み込んだ文字列を出力してみる。
    TextOutW(dcPrint, 0, 1, sBuffUni, sizeof(sBuffUni));

  EndDoc( dcPrint );            // 印字終了
  DeleteDC( dcPrint );          // デバイスコンテキストの破棄

  AfxMessageBox(L"印刷しましたよ");
  return;
}


どなたか、ご教授願えないでしょうか?
宜しくお願い致します。

編集 削除
kou1sakamoto  2003-08-04 20:59:18  No: 51900  IP: [192.*.*.*]

自己レスです。

環境を書き忘れました。
WindowsXP(Homeエディション)、VB、VC++ともにVisualStudio6.0です。

宜しくお願い致します。

編集 削除
Wanderer  2003-08-05 14:52:11  No: 51901  IP: [192.*.*.*]

とりあえず確認なんですけど、プリンタではなく画面に出力した場合は
正常なのでしょうか?

あと、EndPage()が必要だと思います。

編集 削除
kou1sakamoto  2003-08-06 16:30:17  No: 51902  IP: [192.*.*.*]

再び自己レスです。

最初のソースにフォントの設定を追加したところ、
UNICODEにしかない文字が正しく印刷されました。

お騒がせしまして申し訳ありませんでした。

編集 削除