
環境はWIN98 VC++6.0 MFCです。
ビットマップを印刷しようとしたら非常に難しくどうしても出来ませんでした。
Q&Aのサイトで教えて頂いたり、調べた結論はとにかく難しいということです。
ここで疑問があります。
市販の画像を扱うソフトは当然のことながら、どのソフトでもちゃんと印刷できます。
また、特殊な内容のプログラムならいざ知らず、印刷という一般的な処理です。
なのにどうしてネット上のプログラム講座や本にのっていないのでしょうか?
お決まりのパターンのコードがあっても良さそうなのにいくら探しても見つかりません。
また、ソフト会社に勤めていない一般のプログラマーはどうやって印刷しているのですか????
どうかご意見おねがいします。
No.6ベストアンサー
- 回答日時:
コード見つけました。
http://www.codeguru.com/forum/showthread.php?thr …
ビットマップを読み込むときから DIB で読み込んでますね。
このほうが画面モード(色数)に依存しなくていいです。
↓の本にも載ってるらしいです。(第17章,ビットマップの印刷)
http://bookweb.kinokuniya.co.jp/htm/4881359363.h …
この回答への補足
やった~~。とうとう完成しました。
if (pDC->IsPrinting()) {
教えていただいた印刷用コード
}
else{
リソースからの読み込み
}
#出来てみればifで使い分けることは知っていたのに、
なぜか印刷の難しさに気をとられて全然思いつかなかった。
yoppiiさ~~~~~~~~~ん。
本当に有難うございま~~~~~~~~す。
とうとう印刷できました。
わざわざ調べていただいたのですね。
感謝 感謝です。
でも、最初の質問の疑問は残ります。
ほかの初心者の皆さんはいったいどうやって印刷しているのでしょう。
でもこれからは安心ですね。
なぜなら同じ悩みに対しては、Q&Aサイトで質問があれば私がばっちりコードを丸ごと提示できますから。
本当に有難うございました。
あっ、うれしさのあまり肝心なことを忘れてました。
教えていただいたコードをvoid CXxxView::OnDraw(CDC* pDC)内に書いたのですが、パソコンの画面で相当大きくしないと印刷時は小さくなってしまいます。
これはどうやって解決すれば良いのですか?
No.5
- 回答日時:
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
回答ありがとうございます。
聞いてばかりで申し訳ありません。
(本当にそう思っています。)
皆さん色々アドバイスは頂けるのですが、結局VC++ MFCでこうすれば良いというコードは提示頂けません。
当然のことながら不親切からではなく、皆さんもお手元にそのようなコードがないのでは?と思ってしまいます。
自分で考えろという以前の問題として、どうしてコードが無いのかが不思議でなりません。
yoppiiさんが定石と言われるように、皆さんそうおっしゃいますが、コードが有りません。
他のサイトでも同じ質問は山ほどありますが、結局はコードが見えないままやり取りが自然消滅してしまっています。
どうかお願いです。
誰かコードで教えてください。
No.4
- 回答日時:
やはりそうでしたか。
WindowsXpで印刷されているとすると、解像度の問題ということでOKですね。
Windows98の場合は、プリンタドライバに問題があるかもしれません。
OnDraw()でpDCの情報を見てみてください。
もしかすると、Windows98のプリンタドライバは、BitBltをサポートしていなかもしれません。
(白黒のみとか)
回答ありがとうございます。
自分で作ったプログラムでは印刷できませんが、当然のことながら市販のソフトやフリーソフトで有ればちゃんとカラーで綺麗に印刷できます。
自作ソフトでこれを実現するにはどうすれば良いのでしょうか?
No.3
- 回答日時:
#2です。
MFCのドキュメントビュー環境では、
#1の方が回答されているように、OnDraw()で印刷が可能です。
印刷がされていないようですが、
スクリーンとプリンターでは、同じDCでも属性が少し違いますよね。(解像度とか色数)
GetDeviceCaps()などで、情報が得られます。
1.もしかすると解像度が大きくて、左上に小さく印刷されているとか??何も印刷されませんか?
2.pDC->TextOut(),DrawText()あたりは、うまく印刷できますか?
1.だとすると StretchBlt()で大きく印刷してみてどうでしょう。
回答ありがとうございます。
1.もしかすると解像度が大きくて、左上に小さく印刷されているとか??何も印刷されませんか?
XPだと確かに小さく印刷されます。
WIN98だとまったく何も印刷されません。
2.pDC->TextOut(),DrawText()あたりは、うまく印刷できますか?
これだとまったく問題ありません。
このWIN98でまったく印刷されない状況を何とかしたいのです。
よろしくお願い致します。
よろしくお願い致します。
No.2
- 回答日時:
ビットマップを印刷とのことですが、
単純に印刷するとすると、文字を印刷するのと同じ様に
DC(デバイスコンテキスト)に、BitBlt,StretchBltなどで可能だと思いますが。
スクリーンのDCの変わりに、プリンターのDCを使って描画処理をすればよろしいかと。
通常のやり方だと、色がにじんだり、思ったような印刷ができないということでしょうか?
回答ありがとうございます。
#1の回答に今の状況を書いておきました。
GAIA9916さんが書かれていることを、具体的にコードに直すとどうすれば良いのでしょうか?
どうか教えていただけないでしょうか?
No.1
- 回答日時:
>なのにどうしてネット上のプログラム講座や本にのっていないのでしょうか?
「はじめてのMFCプログラミング(3)」にはでていました。
MFCウィザードで普通にEXEファイルを作成すると印刷プレビューと印刷機能も
自動でついてきますよね?
OnDraw内にビットマップを表示するコードを書いて
印刷したのでは駄目なのですか?
回答ありがとうございます。
>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)」にはでていました。
確かに出ていますが、ビットマップではないですよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- プリンタ・スキャナー 封筒印刷 差出人印刷ずれる 4 2022/05/01 10:12
- フリーソフト 写真の一覧印刷ソフト 2 2023/07/28 16:48
- PDF 画像調整してスクショし保存した画像をPC画面と同画質で印刷する方法 1 2022/03/31 19:09
- その他(IT・Webサービス) 画像調整してスクショし保存した画像をPC画面と同画質で印刷する方法 3 2022/03/31 19:11
- アプリ 公式印刷アプリは外部ストレージ選べずSDカードに保存してある写真を印刷できませんでした!どうすれば? 2 2022/10/08 22:31
- プリンタ・スキャナー PowerPointとPDFで一部印刷されない文字がある 2 2022/06/04 11:53
- Excel(エクセル) エクセルでキーリストからデータを取り出して1枚1枚印刷するには? 11 2022/06/27 09:52
- UNIX・Linux Ubuntu22.04、nanoエディタの使い方について 2 2022/10/24 19:50
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Word(ワード) マイクロソフト365を購入し、Wordを使用しているのですが、ポスター印刷のやり方を教えていただきた 2 2023/04/09 20:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
印刷ダイアログを表示させたくない
-
印刷ダイアログを表示させない方法
-
URLを指定して直接印刷って出来...
-
クリスタルレポートをASPで
-
プリンターを指定して印刷するには
-
ご存知の方がいましたら教えて...
-
PHPでPDFファイルの直接印刷
-
A4の2枚をA3の1枚にする編集方法?
-
プリンタの印刷ジョブを削除し...
-
[Visual Studio] ソースの印刷...
-
HPの背景画像や背景色が印刷時...
-
シート入力後に伝票へ転記から...
-
マクロで封筒を自動印刷
-
vbaでPDFファイルが印刷されない
-
VBからのプリンタ制御について
-
意味不明の実行時エラーで困っ...
-
VBAでOutlookを終了させたい Ex...
-
Process.Startで起動したアプリ...
-
インストール不要アプリケーシ...
-
vba 時間の引き算 例えば 15:00...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
印刷ダイアログを表示させない方法
-
vbaでPDFファイルが印刷されない
-
印刷ダイアログを表示させたくない
-
印刷要求順番と印刷出力順番が...
-
A4の2枚をA3の1枚にする編集方法?
-
オートメーションエラー(214741...
-
VBscriptでPDFファイルを直接印...
-
プリンターを指定して印刷するには
-
EXCELファイルの複数ダウンロー...
-
ACCESSで設定した帳票の用紙サ...
-
VB2005から複合機を使い自動FAX...
-
VBAで印刷スプール終了の判定を...
-
2回以上PDFをコピーや印刷がで...
-
PHPでPDFファイルの直接印刷
-
テキストファイル印刷 .net VB...
-
VBAで印刷の成功判定
-
VB.NET+ActiveReports で印刷...
-
VBでExcel印刷する時のプリンタ...
-
クリレポのプリンタ設定について
-
VB6上から印刷ダイアログを表示...
おすすめ情報