我通过Windows API调用打印机设置对话框
private void OpenPrinterPropertiesDialog(PrinterSettings printerSettings)
{
IntPtr hDevMode = printerSettings.GetHdevmode(printerSettings.DefaultPageSettings);
IntPtr pDevMode = GlobalLock(hDevMode);
//int sizeNeeded = DocumentProperties(new WindowInteropHelper(this).Handle, IntPtr.Zero, printerSettings.PrinterName, pDevMode, ref pDevMode, 0);
int sizeNeeded = DocumentProperties(new WindowInteropHelper(this).Handle, IntPtr.Zero, printerSettings.PrinterName, IntPtr.Zero, pDevMode, 0);
IntPtr devModeData = Marshal.AllocHGlobal(sizeNeeded);
DocumentProperties(new WindowInteropHelper(this).Handle, IntPtr.Zero, printerSettings.PrinterName, devModeData, pDevMode, 14);
GlobalUnlock(hDevMode);
printerSettings.SetHdevmode(devModeData);
printerSettings.DefaultPageSettings.SetHdevmode(devModeData);
GlobalFree(hDevMode);
Marshal.FreeHGlobal(devModeData);
}
我的问题是设置未保存。这些设置应保存在操作系统级别,以便这些设置保留在每个应用程序中。
你在msdn上读过这篇文章吗?
看来你应该打电话
IntPtr hDevMode = printerSettings.GetHdevmode();
而不是
IntPtr hDevMode = printerSettings.GetHdevmode(printerSettings.DefaultPageSettings);
我也对DocumentProperties
中14
的论点从何而来感兴趣。这不应该是DM_OUT_BUFFER
吗?