重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

環境はWIN98 VC++6.0 MFCです。

ビットマップを印刷しようとしたら非常に難しくどうしても出来ませんでした。

Q&Aのサイトで教えて頂いたり、調べた結論はとにかく難しいということです。

ここで疑問があります。
市販の画像を扱うソフトは当然のことながら、どのソフトでもちゃんと印刷できます。
また、特殊な内容のプログラムならいざ知らず、印刷という一般的な処理です。

なのにどうしてネット上のプログラム講座や本にのっていないのでしょうか?

お決まりのパターンのコードがあっても良さそうなのにいくら探しても見つかりません。

また、ソフト会社に勤めていない一般のプログラマーはどうやって印刷しているのですか????

どうかご意見おねがいします。

A 回答 (6件)

コード見つけました。


http://www.codeguru.com/forum/showthread.php?thr …
ビットマップを読み込むときから DIB で読み込んでますね。
このほうが画面モード(色数)に依存しなくていいです。

↓の本にも載ってるらしいです。(第17章,ビットマップの印刷)
http://bookweb.kinokuniya.co.jp/htm/4881359363.h …

この回答への補足

やった~~。とうとう完成しました。

if (pDC->IsPrinting()) {
教えていただいた印刷用コード

}
else{
リソースからの読み込み
}

#出来てみればifで使い分けることは知っていたのに、
なぜか印刷の難しさに気をとられて全然思いつかなかった。

補足日時:2003/12/08 22:07
    • good
    • 0
この回答へのお礼

yoppiiさ~~~~~~~~~ん。
本当に有難うございま~~~~~~~~す。

とうとう印刷できました。

わざわざ調べていただいたのですね。
感謝 感謝です。

でも、最初の質問の疑問は残ります。
ほかの初心者の皆さんはいったいどうやって印刷しているのでしょう。

でもこれからは安心ですね。
なぜなら同じ悩みに対しては、Q&Aサイトで質問があれば私がばっちりコードを丸ごと提示できますから。

本当に有難うございました。

あっ、うれしさのあまり肝心なことを忘れてました。
教えていただいたコードをvoid CXxxView::OnDraw(CDC* pDC)内に書いたのですが、パソコンの画面で相当大きくしないと印刷時は小さくなってしまいます。

これはどうやって解決すれば良いのですか?

お礼日時:2003/12/07 17:22

DIB (デバイスに依存しないビットマップ)に変換してから印刷するのが定石だと思います。



GetDIBits で DIB を取得して,
StretchDIBits でプリンタの DC に流し込む。

DIB については,
http://msdn.microsoft.com/library/default.asp?ur …

こちらは Delphi のものですが,参考になるでしょう。
http://www.asahi-net.or.jp/~HA3T-NKMR/tips004.htm
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

聞いてばかりで申し訳ありません。
(本当にそう思っています。)

皆さん色々アドバイスは頂けるのですが、結局VC++ MFCでこうすれば良いというコードは提示頂けません。
当然のことながら不親切からではなく、皆さんもお手元にそのようなコードがないのでは?と思ってしまいます。

自分で考えろという以前の問題として、どうしてコードが無いのかが不思議でなりません。

yoppiiさんが定石と言われるように、皆さんそうおっしゃいますが、コードが有りません。

他のサイトでも同じ質問は山ほどありますが、結局はコードが見えないままやり取りが自然消滅してしまっています。

どうかお願いです。
誰かコードで教えてください。

お礼日時:2003/12/07 15:36

やはりそうでしたか。


WindowsXpで印刷されているとすると、解像度の問題ということでOKですね。
Windows98の場合は、プリンタドライバに問題があるかもしれません。
OnDraw()でpDCの情報を見てみてください。
もしかすると、Windows98のプリンタドライバは、BitBltをサポートしていなかもしれません。
(白黒のみとか)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

自分で作ったプログラムでは印刷できませんが、当然のことながら市販のソフトやフリーソフトで有ればちゃんとカラーで綺麗に印刷できます。

自作ソフトでこれを実現するにはどうすれば良いのでしょうか?

お礼日時:2003/12/07 14:19

#2です。


MFCのドキュメントビュー環境では、
#1の方が回答されているように、OnDraw()で印刷が可能です。
印刷がされていないようですが、
スクリーンとプリンターでは、同じDCでも属性が少し違いますよね。(解像度とか色数)
GetDeviceCaps()などで、情報が得られます。

1.もしかすると解像度が大きくて、左上に小さく印刷されているとか??何も印刷されませんか?
2.pDC->TextOut(),DrawText()あたりは、うまく印刷できますか?

1.だとすると StretchBlt()で大きく印刷してみてどうでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

1.もしかすると解像度が大きくて、左上に小さく印刷されているとか??何も印刷されませんか?

XPだと確かに小さく印刷されます。
WIN98だとまったく何も印刷されません。


2.pDC->TextOut(),DrawText()あたりは、うまく印刷できますか?

これだとまったく問題ありません。

このWIN98でまったく印刷されない状況を何とかしたいのです。

よろしくお願い致します。
よろしくお願い致します。

お礼日時:2003/12/07 11:07

ビットマップを印刷とのことですが、


単純に印刷するとすると、文字を印刷するのと同じ様に
DC(デバイスコンテキスト)に、BitBlt,StretchBltなどで可能だと思いますが。
スクリーンのDCの変わりに、プリンターのDCを使って描画処理をすればよろしいかと。

 通常のやり方だと、色がにじんだり、思ったような印刷ができないということでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

#1の回答に今の状況を書いておきました。
GAIA9916さんが書かれていることを、具体的にコードに直すとどうすれば良いのでしょうか?

どうか教えていただけないでしょうか?

お礼日時:2003/12/06 23:04

>なのにどうしてネット上のプログラム講座や本にのっていないのでしょうか?



「はじめてのMFCプログラミング(3)」にはでていました。
MFCウィザードで普通にEXEファイルを作成すると印刷プレビューと印刷機能も
自動でついてきますよね?
OnDraw内にビットマップを表示するコードを書いて
印刷したのでは駄目なのですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>OnDraw内にビットマップを表示するコードを書いて
>印刷したのでは駄目なのですか?

先日同じ質問をしたばかりで申し訳ないのですが、改めて状況を話しますと、以下のコードでクライアント領域に表示されますが、印刷は出来ません。
どのようにすれば良いかご存知でしたら、教えていただきたいのですが。

void CXxxView::OnDraw(CDC* pDC)
{
CXxxDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。

CDC myDC;
CBitmap myBMP;
myBMP.LoadBitmap(IDB_BITMAP3);
myDC.CreateCompatibleDC(pDC);

CBitmap* oldBMP=myDC.SelectObject(&myBMP);
pDC->BitBlt(10,10,60,100,&myDC,0,0,SRCCOPY);
myDC.SelectObject(oldBMP);

}

>「はじめてのMFCプログラミング(3)」にはでていました。
確かに出ていますが、ビットマップではないですよね。

お礼日時:2003/12/06 23:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A