- ベストアンサー
プリンタへ文字列の出力方法について
1、改行コード「\r\n」を含む文字列を取得 2、「印刷」コモンダイアログを呼出す。 3、TextOut()関数で出力する。 すると、改行されずに「・・」と文字化けされて出力される。 どうやらTextOut()関数では、改行コードがサポートされていない様でした。 そこで、質問です。 改行コードを含む文字列を、改行して出力する方法はないでしょうか? TextOut()関数で出力するには、 改行を含む文字列を、改行を含まない文字列に分けるしかないですよね? 良い方法がないかな?と思い質問させて頂きました。 #Win98、VC++、SDKで作成しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
dannerです 印刷できませんかぁ rectにはちゃんと値を設定してますか? 多分していると思いますが...
その他の回答 (1)
- danner
- ベストアンサー率72% (8/11)
dannerです。 改行コードを改行した形で出力するには DrawText関数を使用します。 パラメータのuFormatにDT_WORDBREAKを指定すればOKです。 詳しいパラメータはMSDNで調べてください。
お礼
回答ありがとうございます。 さっそく試してみましたが、まだ印刷できてません。 下記の様にしました。 if(StartDoc(pd.hDC, &di) > 0 ) { for(wCopies=0; wCopies<pd.nCopies; wCopies++) { StartPage(pd.hDC); DrawText(pd.hDC, tcBuf, lstrlen(tcBuf), &rect, DT_WORDBREAK); //TextOut(pd.hDC, 100, 100+tm.tmHeight, tcBuf, lstrlen(tcBuf)); EndPage( pd.hDC ); } EndDoc( pd.hDC ); } DrawTextだと印刷できず。 TextOutだと出力されるも、改行されず。 DrawTextの使い方は間違ってないですよね? まだ、原因がつかめない状態です。
補足
1度、回答して補足するともう書けないみたいなので、 見ずらいけど、ここに書きます。 本件は、たったいま無事に解決しました。 どうも、ありがとうございました。 原因は、ご指摘のとおりに、 RECT構造体の設定にありました。
お礼
お手数おかけして、すみません。 RECT構造体には、 rect.top = (GetDeviceCaps(pd.hDC, LOGPIXELSY)* (psd.rtMargin.top/1000))- GetDeviceCaps(pd.hDC, PHYSICALOFFSETY); rect.left = (GetDeviceCaps(pd.hDC, LOGPIXELSX)* (psd.rtMargin.left/1000))- GetDeviceCaps(pd.hDC, PHYSICALOFFSETX); rect.right = lpDevMode->dmPelsWidth - (GetDeviceCaps(pd.hDC, LOGPIXELSX)* (psd.rtMargin.right/1000))- GetDeviceCaps(pd.hDC, PHYSICALOFFSETX); rect.bottom = lpDevMode->dmPelsHeight - (GetDeviceCaps(pd.hDC, LOGPIXELSY)* (psd.rtMargin.bottom/1000))- GetDeviceCaps(pd.hDC, PHYSICALOFFSETY); としました。
補足
ちょっと気になったのですが、 文字列内の文字は、MS ゴシックで書いてあり、 出力する際、(方法1) PRINTDLG pd; TEXTMETRIC tm; GetTextMetrics(pd.hDC , &tm); として、TextOut()では、改行されないにしろ、出力動作は行います。 しかし、上記から(方法2) //GetTextMetrics(pd.hDC , &tm);をコメントアウトすると出力されません。 (方法3) PRINTDLG pd; TEXTMETRIC tm; GetTextMetrics(pd.hDC , &tm); DrawText(pd.hDC, tcBuf, lstrlen(tcBuf), &rect, DT_LEFT | DT_WORDBREAK); 現象として、 方法1:出力できるが改行されない。 方法2と方法3: 一瞬だけど、プリンタモニタが起動するが、 すぐ落ちる? なにかしらフォントが関係しているのでしょうか?