|
■No55333 (オショウ さん) に返信
> 一度、以下の情報で試してみて下さい。
> http://hp.vector.co.jp/authors/VA016117/prnreso.html
お教えいただいたサイトを参考にして取得することができました。
ありがとうございます。
コードを以下に掲載します。
const Int32 PD_RETURNDC = 0x100;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
[System.Runtime.InteropServices.ComVisible(false)]
internal class PRINTDLG
{
public Int32 lStructSize;
public IntPtr hwndOwner;
public IntPtr hDevMode;
public IntPtr hDevNames;
public IntPtr hDC = IntPtr.Zero;
public Int32 Flags = PD_RETURNDC;
public Int16 FromPage = 0;
public Int16 ToPage = 0;
public Int16 MinPage = 0;
public Int16 MaxPage = 0;
public Int16 Copies = 0;
public IntPtr hInstance = IntPtr.Zero;
public IntPtr lCustData = IntPtr.Zero;
public IntPtr lpfnPrintHook;
public IntPtr lpfnSetupHook = IntPtr.Zero;
public IntPtr lpPrintTemplateName = IntPtr.Zero;
public IntPtr lpSetupTemplateName = IntPtr.Zero;
public IntPtr hPrintTemplate = IntPtr.Zero;
public IntPtr hSetupTemplate = IntPtr.Zero;
}
[DllImport("comdlg32.dll", CharSet = CharSet.Auto)]
private static extern bool PrintDlg([In, Out] PRINTDLG lppd);
[DllImport("gdi32.dll", CharSet = CharSet.Auto)]
private static extern int GetDeviceCaps(IntPtr hDC, int nIndex);
public static void test()
{
PRINTDLG pd = new PRINTDLG();
pd.lStructSize = Marshal.SizeOf(pd);
if (PrintDlg(pd) == false) return;
int mm_h = GetDeviceCaps(pd.hDC, HORZRES);
int dot_h = GetDeviceCaps(pd.hDC, HORZSIZE);
int mm_v = GetDeviceCaps(pd.hDC, VERTRES);
int dot_v = GetDeviceCaps(pd.hDC, VERTSIZE);
}
■No55338 (魔界の仮面弁士 さん) に返信
>>PrintDocument.DefaultPageSettingsから取るPrinterResolution
>>の値はPrintDialogで変更した値が反映されておりませんでした。
>
> ドライバ側の問題とか…? 当方環境では、
> private void button3_Click(object sender, EventArgs e)
> {
> printDialog1.ShowDialog();
> MessageBox.Show(printDocument1.DefaultPageSettings.PrinterResolution.ToString());
> }
> で、dpi 値の設定変更が反映されていました。
>
> # printDialog1 / printDocument1 は、デザイナ上でフォームに貼っておいたものです。
> # printDialog1.Document も、デザイン時に printDocument1 にしてあります。
ご回答いただきありがとうございます。
PrintDialog も PrintDocument も実行時でNewしたものでしたので
デザインに貼って確認したのですが解像度は変わりませんでした。
また、確認したところ以下のような動作になりました。
◆プリンタ自体の選択を変更した場合
例えば、300dpiプリンタ「A」と600dpiプリンタ「B」を切り替えると正しく
解像度は取得されます。
◆プリンタは同じでドライバオプション(?)から解像度を変更した場合
例えば、プリンタ「A」を設定で300dpi→600dpiに切り替えると300dpiのまま
返ってきます。
ですが、、、
解像度変更後のPrintDocument を PrintDialog.Documentに設定して表示させると
解像度は変更されているのでどこかに情報は保持されているとは思うのですが。。。
どうしたら取得できるのかわからない状態です(?_?)
|