プロが教える店舗&オフィスのセキュリティ対策術

環境は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);

}

A 回答 (4件)

> 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の円」でそこそこの大きさの円が描画される事を期待していると、用紙に印刷ゴミのような点が描画されていても気づかないような事があります。
この大きさのビットマップならば紙に出ていれば気が付くハズですが…。
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。

あれから分かったことは、
1.XPの場合は確かに非常に小さい絵になっていました。

これを大きくするにはどうすれば良いのですか?

2.WIN98の場合は、やはりまったくプレビューに出てきません。当然、印刷もされません。

これはどうすれば出てくるようになるのでしょうか?

3.また、言われているように座標系が変わっていたとして、通常のクライアント領域では見えるのに、プレビューでは領域外に飛び出して見えないなどと言うことが有るのでしょうか?

お分かりの方、宜しくお願いいたします。

お礼日時:2003/12/03 12:47

> 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++)からの出力で細い実線が印刷されない問題を修正しました。
    • good
    • 0
この回答へのお礼

いろいろとありがとうございました。

どうも一筋縄でいかないようです。

以下でプレビューに表示することが出来ました。
//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 …
がありました。

お礼日時:2003/12/05 20:01

> コードを書いた場所が悪いのでしょうか?



実は画面の処理って最近扱ってないんですが…。
コード自体は良いように見えます。
取りあえず、BitBltの返り値が正常終了(0以外)かどうかをチェックしてみてください。

正常終了ならば、描画自体は行われているハズなので、とてつもなく小さくなっているとか、用紙の外に描かれているとか、と分析できます。
    • good
    • 0
この回答へのお礼

何度も回答ありがとう御座います。

自分でも当然調べますが、もう一度確認させてください。

XPでは印刷プレビューで表示されているし、印刷も出来るのに、WIN98では印刷プレビューで見れないし印刷も出来ないということが有るのでしょうか?

宜しくお願いいたします。

お礼日時:2003/12/03 18:40

引き伸ばし/縮小の処理を行うには、通常なら


CDC::StretchBlt
を使用します。
プリンタ(ドライバ)のデバイスが対応している必要があります。

--
> やはりまったくプレビューに出てきません。

デバイスの座標系を考慮して描画処理を修正したが出てこない。と言う事でしょうか?

// はみだした△を描画(てっぺんから時計回り、最後はちょっと右上にズレる)
pDC->MoveTo( 0,-100)
pDC->LineTo( 100, 100)
pDC->LineTo(-100, 100)
pDC->LineTo( 5,-110)

のような図形が期待通りに描けるか、検証してみてください。

> 通常のクライアント領域では見えるのに、プレビューでは領域外に飛び出して見えないなどと言うことが有るのでしょうか?

座標系が変わる事によって、y範囲が正の部分が領域外にされてしまった場合、当然見えなくなります。
例えば、あるデバイスでは(12000,13000)に位置に点を打つと中心に表示、印刷されるような場合でも、画面だと領域外ですよね?
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。

>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);
//■ここまで追加
}

お礼日時:2003/12/03 16:15

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