- PR -

Panelの領域だけ印刷したい

1
投稿者投稿内容
いも
常連さん
会議室デビュー日: 2006/01/26
投稿数: 31
投稿日時: 2006-04-07 16:31
こんにちは。いつも参考にさせていただいています。

C#.NET 2003でWindowsアプリケーションを開発しています

パネルの領域だけ印刷するにはどうしたら良いか、
どなたか教えていただけないでしょうか

フォームの上にはパネルやボタンや、その他色々なコンポーネントがあるのですが
ある特定のパネルの領域だけ印刷をしたいのです。

現状では、フォームの領域をBitmapにして、端っこから200とか300とか
絶対値を入れてちぎっています…。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-07 16:41
引用:

いもさんの書き込み (2006-04-07 16:31) より:

フォームの上にはパネルやボタンや、その他色々なコンポーネントがあるのですが
ある特定のパネルの領域だけ印刷をしたいのです。


BitBlt を使ってイメージを作り、PrintDocument に流し込めばできると思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
いも
常連さん
会議室デビュー日: 2006/01/26
投稿数: 31
投稿日時: 2006-04-11 10:11
返信がとっても遅れてすみません。
BitBltって何だろう???と思いましたが
調べてみたらすぐ解決しました!
ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-11 10:22
引用:

いもさんの書き込み (2006-04-11 10:11) より:

返信がとっても遅れてすみません。
BitBltって何だろう???と思いましたが
調べてみたらすぐ解決しました!
ありがとうございました。


よろしければ、具体的にどのように解決したのかフィードバックして頂けませんか?
理由は、同じ問題で悩む第三者が、こちらを訪れた時に役に立つからです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
いも
常連さん
会議室デビュー日: 2006/01/26
投稿数: 31
投稿日時: 2006-04-12 11:46
そうでした、そうでした。

ええと、gdi32.dllをインポートしてBitBltという関数を使いました。

Graphics g_pl = pnl.CreateGraphics();
Bitmap bmp = new Bitmap(pnl.Size.Width, pnl.Size.Height, g_pl);
Graphics g_mem = Graphics.FromImage(bmp);

という感じでGraphicsオブジェクトを作って、

IntPtr dc1 = g_pl.GetHdc();
IntPtr dc2 = g_mem.GetHdc();

という感じでデバイスコンテキストハンドル?を取得して

BitBlt(dc2, 0, 0, pnl.ClientRectangle.Width, pnl.ClientRectangle.Height, dc1, 0, 0, 13369376);

で、パネルの領域を取得して

PrintDocument.Print()で呼ばれるイベントの中に

e.Graphics.DrawImage(bmp, 0, 0); //bmpは上記で使ったBitmap bmpです

と書いたら印刷出来ました!


http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/dv_vbcode/html/vbtskCodeExamplePrintingForm.asp
ここを参考にしました。
イマイチ良くわからないのでまだまだ勉強が必要です…。
1

スキルアップ/キャリアアップ(JOB@IT)