環境はWIN98 VC++6.0 MFCです。
初めて印刷に挑戦します。
TextOut()で書いた文字は印刷プレビューでちゃんと表示されましたが、以下のようにして取りこんだ画像を印刷プレビューで見ても何も表示されません。
どうしたら印刷できるようになりますか?
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);
}
No.1ベストアンサー
- 回答日時:
> pDC->BitBlt(10,10,60,100,&myDC,0,0,SRCCOPY);
ここの(10,10)に描画している所で、デバイスによっては座標系が画面の座標系と違っているものがあります。
|用紙の描画範囲
|
|×(10,-10)
┼――→
↓×(10,10)
左下が原点(0,0)で用紙の中が(10,-10)とか。(10,10)は用紙の外側。
ヘルプのCDCクラスの「マッピング関数」「座標関数」の説明、用語を参考にして、webなどでも調べてみてはいかがでしょう?
--
あと、同様の話で「半径10の円」でそこそこの大きさの円が描画される事を期待していると、用紙に印刷ゴミのような点が描画されていても気づかないような事があります。
この大きさのビットマップならば紙に出ていれば気が付くハズですが…。
回答ありがとう御座います。
あれから分かったことは、
1.XPの場合は確かに非常に小さい絵になっていました。
これを大きくするにはどうすれば良いのですか?
2.WIN98の場合は、やはりまったくプレビューに出てきません。当然、印刷もされません。
これはどうすれば出てくるようになるのでしょうか?
3.また、言われているように座標系が変わっていたとして、通常のクライアント領域では見えるのに、プレビューでは領域外に飛び出して見えないなどと言うことが有るのでしょうか?
お分かりの方、宜しくお願いいたします。
No.4
- 回答日時:
> XPでは印刷プレビューで表示されているし、印刷も出来るのに、WIN98では印刷プレビューで見れないし印刷も出来ないということが有るのでしょうか?
デバイスコンテキスト(DC)を利用した印刷の場合、あくまでもプリンタ(ドライバ)に対して表示(印刷)の要求を行っていますので、OSが違う→デバイスドライバが違う以上、印刷結果が異なる事はありえます。
--
適当に探した例ですと、
Windows 2000/XP対応 IPSiO Color 2000用 IPDL-Cドライバ Ver. 5.03
http://support.ricoh.com/pub_j/drivers/ricoh/ipc …
Windows 95/98/Me対応 IPSiO Color 2000用 IPDL-Cドライバ Ver. 3.54
http://support.ricoh.com/pub_j/drivers/ricoh/ipc …
後者のWin9x用のドライバの方にだけ以下のような記述がありました。
| 6)自作アプリ(VC++)からの出力で細い実線が印刷されない問題を修正しました。
いろいろとありがとうございました。
どうも一筋縄でいかないようです。
以下でプレビューに表示することが出来ました。
//myBMP.LoadBitmap(_T("IDB_BITMAP1"));//IDB_BITMAP1);←ダメ
//////// これでないとプレビューで見れない /////////
myBMP.Attach(::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_BITMAP1),
IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION));
あと、本格的なコードがあるサイトとして、
http://www.codeproject.com/printing/printlib.asp
画面をハードコピーし印刷するコード、
http://www.topposystem.co.jp/DL/Sample_Source/Ha …
がありました。
No.3
- 回答日時:
> コードを書いた場所が悪いのでしょうか?
実は画面の処理って最近扱ってないんですが…。
コード自体は良いように見えます。
取りあえず、BitBltの返り値が正常終了(0以外)かどうかをチェックしてみてください。
正常終了ならば、描画自体は行われているハズなので、とてつもなく小さくなっているとか、用紙の外に描かれているとか、と分析できます。
何度も回答ありがとう御座います。
自分でも当然調べますが、もう一度確認させてください。
XPでは印刷プレビューで表示されているし、印刷も出来るのに、WIN98では印刷プレビューで見れないし印刷も出来ないということが有るのでしょうか?
宜しくお願いいたします。
No.2
- 回答日時:
引き伸ばし/縮小の処理を行うには、通常なら
CDC::StretchBlt
を使用します。
プリンタ(ドライバ)のデバイスが対応している必要があります。
--
> やはりまったくプレビューに出てきません。
デバイスの座標系を考慮して描画処理を修正したが出てこない。と言う事でしょうか?
// はみだした△を描画(てっぺんから時計回り、最後はちょっと右上にズレる)
pDC->MoveTo( 0,-100)
pDC->LineTo( 100, 100)
pDC->LineTo(-100, 100)
pDC->LineTo( 5,-110)
のような図形が期待通りに描けるか、検証してみてください。
> 通常のクライアント領域では見えるのに、プレビューでは領域外に飛び出して見えないなどと言うことが有るのでしょうか?
座標系が変わる事によって、y範囲が正の部分が領域外にされてしまった場合、当然見えなくなります。
例えば、あるデバイスでは(12000,13000)に位置に点を打つと中心に表示、印刷されるような場合でも、画面だと領域外ですよね?
回答ありがとう御座います。
>CDC::StretchBlt
これは後から確認して見ます。
>図形が期待通りに描けるか、検証してみてください。
自分で描いた図形は問題ありません。
読み込んだビットマップのみプレビューで見えません。
コードを書いた場所が悪いのでしょうか?
void CRrrView::OnDraw(CDC* pDC)
{
CRrrDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。
//■ここから追加
CDC myDC;
CBitmap myBMP;
myBMP.LoadBitmap(IDB_BITMAP1);
myDC.CreateCompatibleDC(pDC);
CBitmap* oldBMP=myDC.SelectObject(&myBMP);
pDC->BitBlt(0,0,460,800,&myDC,0,0,SRCCOPY);
myDC.SelectObject(oldBMP);
//■ここまで追加
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- プリンタ・スキャナー WPS Writerで文章を作り、下側にノンブルを設定したのですが印刷されません。 1 2022/08/04 18:57
- Illustrator(イラストレーター) 印刷プレビューに画像が表示されない 3 2022/09/06 14:34
- プリンタ・スキャナー 印刷ができない 6 2022/04/01 20:47
- Excel(エクセル) エクセルシートのPDFでの保存 2 2022/09/06 13:05
- オープンソース OpenOffice Calc basic で印刷プレビューを表示する方法 1 2023/04/15 12:43
- Excel(エクセル) Excelであるシートだけ印刷できない 1 2022/04/01 09:04
- PDF 画像調整してスクショし保存した画像をPC画面と同画質で印刷する方法 1 2022/03/31 19:09
- その他(IT・Webサービス) 画像調整してスクショし保存した画像をPC画面と同画質で印刷する方法 3 2022/03/31 19:11
- 年賀状作成・はがき作成 ワード・エクセル2007で印刷 2 2023/05/12 05:40
- 邦画 映画『四月物語』の題名は旧約聖書:民族の系譜を表現するとともに露国ウクライナ侵攻の結末を暗示してる? 1 2023/05/03 06:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GDI+で高速な描画
-
MFC リストビューのツリー表示
-
CScrollViewの使用方法について
-
MFCでOnPaintのタイミング
-
word
-
MFCのタイマーのつかい方を教え...
-
ウインドウサイズを変更しても...
-
PCで「使用可能な場合はグラフ...
-
UpdateData( FALSE); による文...
-
VB6,リストボックスの特定行の...
-
VC++プログラムをつかったBMP画...
-
[VB.net] DataGridViewの列ヘッ...
-
CreateFontで回転させて印刷出...
-
この二つの違いは・・・?
-
C言語(dxlib)のDrawboxについ...
-
Bitmapを動かすときのちらつき...
-
InvalidateRectの使い方について
-
panelのスクロール表示について
-
C#のタブコントロールについて...
-
ボタン形のラベル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6,リストボックスの特定行の...
-
[VB.net] DataGridViewの列ヘッ...
-
NVIDIAのシェーダーキャッシュ
-
MFCでOnPaintのタイミング
-
TextBoxに文字を書いても表示さ...
-
word
-
UpdateData( FALSE); による文...
-
VC++プログラムをつかったBMP画...
-
InvalidateRectの使い方について
-
StretchBlt関数について
-
OneNote 2010 文字と描画がずれる
-
C# ラバーバンドの描画を快適に...
-
エクセルでガンチャートを作成...
-
C++にて、塗りつぶされた円を描...
-
VBAにGDI+を参照させる方法
-
MFC DrawText 背景色とフォント
-
GDI+で高速な描画
-
MFCのタイマーのつかい方を教え...
-
Labelの文字をスクロールする際...
-
FlexGridの一部のみ表示を更新...
おすすめ情報