またわからないことがあります。
環境は
VC++ 6.0
windows 2000です。
印刷をするとき
例えばページが3枚になるとする。
1枚目には 1/3
2枚目には 2/3
3枚目には 3/3
と表示させたいのですが・・・
インターネットで調べても
過去ログを調べても
わかりません。
よろしくお願いします。
MFC を使うかどうか、 Doc/View を使うかどうかで回答にかなり違いが出てきます
この点について明らかにして下さい(OSやVCやのバージョンだけでは足りません)
すみません。
MFC です。
Viewを使っているとしたら、プロジェクトを作ったときに既にある
OnPreparePrinting()に最大ページ数を設定する(SetMaxPage())
BOOL XXX::OnPreparePrinting(CPrintInfo* pInfo)
{
pInfo->SetMaxPage(2);
return DoPreparePrinting(pInfo);
}
ClassWizardで自分のビュークラスにOnPrint()を追加して
そこで1ページ単位の処理を書く
何ページ目の処理かってのはpInfo->m_nCurPageで判断する
MSDNの「OnPreparePrinting 関数」の項目に
複数ページを印刷するときの全体の流れなどが載っているので
熟読すること
ダイアログの場合は結構自前でやらないといけない
この場合も上記のMSDNの内容は基礎として役に立つのでやっぱり熟読あるのみ
おちついて、島さんの質問にきっちり答えましょう
上記のようにMFCを使っていても、Viewを使っているかいないかでかなり違いますので
> Doc/View を使うかどうかで回答にかなり違いが出てきます
印刷はもうできるようになっています。
ページの設定部分がわかりません。
>おちついて、島さんの質問にきっちり答えましょう
MFCでViewを使ってます。
勘違いしてましたが、これは印刷する紙にヘッダかフッタとして
印刷したいということでしょうか?
だとしたら設定ではやれませんので、自分で印刷するしかありません
全ページを最初に数えておいて
そのページごとに
そのページ/全ページ
と自分で印刷することになります
MFC で Doc/View なんですね。MFC の場合、SDI か MDI かダイアログベースかというのも
同じくらい重要な情報です。これからは質問なさる場合は忘れずに明記してください
以下は回答するのに際して大切な質問です
1)一ページ分の印刷可能領域は取得できていますか?
2)その上で、印刷中に現在、ページのどの辺りまで印刷できているか判断できますか?
つまり、何時(いつ)次のページになるか判定できますか?
3)画像が、複数ページに亙(わた)って(またがって)いる事はありますか?
その場合、キチンと画像を別々のページに個別に印刷する事が出来ますか?
説明不足ですみません。
>勘違いしてましたが、これは印刷する紙にヘッダかフッタとして
>印刷したいということでしょうか?
そうです。
それで参考になるようなコメントを
教えていただけませんか?
> それで参考になるようなコメントを
> 教えていただけませんか?
これだけの情報でか?
想像でしかないけどCDC*pDC;みたいなのがあったと仮定しての話(たぶんあるはず)
最終的な印刷は1か2のどちらか片方で良い
CDC* pDC = ???;(印刷できているのでCDC*の取得は既にできていると考えられる)
int nAllPage;<-全ページ数を入れる
int nNowPage;<-現在のページ番号
CString strPagePrint;
strPagePrint.Format(%d / %d, nNowPage, nAllPage);
1.
pDC->TextOut(位置x, 位置y, strPagePrint);
2.
RECT rcPagePrint;// <-印刷位置を入れる
pDC->DrawText(strPagePrint, rcPagePrint, DT_CENTER);
印刷はできているという事だから、この辺は理解しているのか?ん~謎だ
あと島さんの最後のコメントの通り、本文(テキストか絵か知りませんが)とは別に
ページ番号を印刷する場所を確保しておかないといけませんよ
やりたいことが伝わってませんでした。
説明をちゃんとしないといけないですよね・・・
固定部分の表がある。
可変部分のいろんな情報がある。(日付や名前など)
名前の部分は人数がかわるときがある。
少ないときは1枚で印刷できるが
多いときは2枚3枚となる。
そうなったときに
1枚目には 1/3
2枚目には 2/3
3枚目には 3/3
とヘッダ部分に出力がしたいです。
ということですが
わかっていただけますか?
だからね、人が訊いてる事にきちんと答えて下さいな(お ね が い !)
> わかっていただけますか?
ここまでの話だとこれでも十分です
で、答えはTextOutかDrawTextを使うということです
日付や名前もどちらかで印刷していると思いますので、その辺参照
印刷位置は自分で計算するしかないし
全ページ数も自分で数えるしかない
現ページ番号は今でも分かってますよね?
コムギさんが知りたい情報は出尽くしたのではないかな
要するに通常のページ内のテキストとまったく同じ方法で
自分で描画しなさいということです。
何かを設定しておけば、ページ数を勝手に印刷してくれるような
便利なメソッドは存在しません。
ある一定の書式にテキストを流し込んで印刷したいのであれば、
オーバーレイ印刷をサポートしたライブラリを使うとか特別な方法を
使わない限り無理です。
そういった便利なライブラリを使わないのであれば、
一から十まですべて自分で描画しなければならないと思ってください。
ページ繰りの制御まで御自身でプログラミングしていて、
かつ、コーディングした内容をきちんと理解しているのであれば、
これまで皆さんが出してくれた情報で十分だと思いますよ。
勉強不足のため
皆様にご迷惑おかけしまして
申し訳ありません。
CPrintInfo を使って自分なりに検討してみます。
もう一度勉強しなおして、出直してきます。
そのときはまたよろしくお願いします。