C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: BeginPrint前にDCハンドルを取得したい


(過去ログ 97 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■57832 / inTopicNo.1)  BeginPrint前にDCハンドルを取得したい
  
□投稿者/ furu (15回)-(2011/03/17(Thu) 11:33:21)

分類:[C#] 

c#4.0です。

GetDeviceCapsを使う為にDCハンドルを取得したいのですが
PrintPageイベントを使用したのですが
印刷もしないのに無駄な気がしてなりません。

    {
        printDocument1.Print();
    }

    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        IntPtr DCハンドル = e.Graphics.GetHdc();

        yyyy = GetDeviceCaps(DCハンドル, xxxx);

        g.ReleaseHdc();

        e.Cancel = true;    //印刷はしない
    }

BeginPrint前にDCハンドルを取得する方法はないでしょうか?

また、PrintPageでミリメートルの設定を行っています。
1万頁で1万回です。
BeginPrintイベントで設定できないでしょうか?

よろしくお願いします。

引用返信 編集キー/
■57835 / inTopicNo.2)  Re[1]: BeginPrint前にDCハンドルを取得したい
□投稿者/ shu (524回)-(2011/03/17(Thu) 11:56:30)
No57832 (furu さん) に返信

> GetDeviceCapsを使う為にDCハンドルを取得したいのですが
> PrintPageイベントを使用したのですが
> 印刷もしないのに無駄な気がしてなりません。
APIつかってもOpenしてCloseしないとDCハンドルはとれないと思うので、妥当なとこではないでしょうか。


> また、PrintPageでミリメートルの設定を行っています。
> 1万頁で1万回です。
> BeginPrintイベントで設定できないでしょうか?
Graphicsに対する単位なので止むを得ないのでは?単位設定をしたからといって
プリンターに送られる情報が変わるわけではないと思います。


引用返信 編集キー/
■57842 / inTopicNo.3)  Re[2]: BeginPrint前にDCハンドルを取得したい
□投稿者/ furu (17回)-(2011/03/17(Thu) 17:29:26)
返信ありがとうございます。

No57835 (shu さん) に返信
> ■No57832 (furu さん) に返信
>
>>GetDeviceCapsを使う為にDCハンドルを取得したいのですが
>>PrintPageイベントを使用したのですが
>>印刷もしないのに無駄な気がしてなりません。
> APIつかってもOpenしてCloseしないとDCハンドルはとれないと思うので、妥当なとこではないでしょうか。

API使えば、BeginPrint(StartDoc)しないで取得できるので
方法はないかと思いました。

>
>
>>また、PrintPageでミリメートルの設定を行っています。
>>1万頁で1万回です。
>>BeginPrintイベントで設定できないでしょうか?
> Graphicsに対する単位なので止むを得ないのでは?単位設定をしたからといって
> プリンターに送られる情報が変わるわけではないと思います。
>
>

そうですか。
Graphicsは、毎回同じインスタンスである事は保証されているのでしょうか?
例えば、1頁目で設定したら2頁目以降では設定は必要ないでしょうか?

引用返信 編集キー/
■57843 / inTopicNo.4)  Re[3]: BeginPrint前にDCハンドルを取得したい
□投稿者/ shu (527回)-(2011/03/17(Thu) 17:46:38)
No57842 (furu さん) に返信

> そうですか。
> Graphicsは、毎回同じインスタンスである事は保証されているのでしょうか?
> 例えば、1頁目で設定したら2頁目以降では設定は必要ないでしょうか?
同じインスタンスかは分からないので毎回設定は必要だと思いますが、毎回の単位の設定が
パフォーマンスに影響を与えることはないのではと思ったしだいです。 単位を変更にしたことによる
パフォーマンス劣化が確認されているのでしたらそれは単位の設定を1回に出来たとして変わるものでは
ないかと思います。
引用返信 編集キー/
■57844 / inTopicNo.5)  Re[4]: BeginPrint前にDCハンドルを取得したい
□投稿者/ 焦げ太 (23回)-(2011/03/17(Thu) 18:17:18)
こんにちは。

私の場合はこんな感じでやっていますが、識者ではありませんので
逆に識者の方に問題ないかを聞きたいくらいですw
ちなみにプリンタ名からHDCをとっているので、プリンタ設定の
デフォルト値(コンパネのプリンタの設定値)になると思います。

# プリンタダイアログなどで解像度の設定をいぢられると
# この方法ではその値を取得できません。

[DllImport("gdi32.dll")]
private static extern IntPtr CreateDC(string lpszDriver, 
    string lpszDevice, string lpszOutput, IntPtr lpInitData);
[DllImport("gdi32.dll")]
private static extern bool DeleteDC(IntPtr hdc);

private void test()
{
    PrintDocument pd = new PrintDocument();
    string name = pd.PrinterSettings.PrinterName;
    try
    {
        //HDC取得
        hDC = CreateDC(@"WINSPOOL", name, null, IntPtr.Zero);
    }
    finally
    {
        DeleteDC(hDC);
    }
}

引用返信 編集キー/
■57845 / inTopicNo.6)  Re[5]: BeginPrint前にDCハンドルを取得したい
□投稿者/ 焦げ太 (24回)-(2011/03/17(Thu) 18:25:35)
プリンタダイアログを表示する場合はPrintDlgを使用しています。
以前このサイトで回答いただいたものです。

[DllImport("comdlg32.dll", CharSet = CharSet.Auto)]
private static extern bool PrintDlg([In, Out] PRINTDLG lppd);

http://bbs.wankuma.com/index.cgi?mode=al2&namber=55332&KLOG=93

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -