none
关于word手动创建打印对话框并打印 RRS feed

  • 问题

  • http://msdn.microsoft.com/zh-cn/site/ms646829#print_dlg

    想手动实现一个打印的功能

    PrintDlgEx函数可以创建一个打印对话框,选择打印范围等值

    PageSetupDlg 可以设置页边距也要打印到的设备等信息

    利用PaintHook函数可以把图片打印在设备上

    但是,在我选择了设备之后,并没有弹出对应的要保存文件的对话框,而且,我调用PaintHook的时候,怎样把我要打印的文件的句柄等信息传进去呀,因为初始化打印框的时候是这么写的

    PAGESETUPDLG psd;    // common dialog box structure

    HWND hwnd;           // owner window

     

    // Initialize PAGESETUPDLG

    ZeroMemory(&psd, sizeof(psd));

    psd.lStructSize = sizeof(psd);

    psd.hwndOwner   = ::GetActiveWindow();//hwnd;

    psd.hDevMode    = NULL; // Don't forget to free or store hDevMode.

    psd.hDevNames   = NULL; // Don't forget to free or store hDevNames.

    psd.Flags       = PSD_INTHOUSANDTHSOFINCHES | PSD_MARGINS | 

    PSD_ENABLEPAGEPAINTHOOK; 

    psd.rtMargin.top = 1000;

    psd.rtMargin.left = 1250;

    psd.rtMargin.right = 1250;

    psd.rtMargin.bottom = 1000;

    psd.lpfnPagePaintHook = (LPPAGEPAINTHOOK)PaintHook;

    if (PageSetupDlg(&psd)==TRUE) { // check paper size and margin values here. //顺便,这个里面是写什么数据的呢? MessageBox(0, 0, "001", 0); }


    苏福
    2011年12月13日 2:50

答案

  • 苏福你好!

    我打开了你给的链接,定位到了“Display the Print Dialog Box”部分。但是你给的代码却和“Setting Up the Printed Page”部分的代码相似。

    我在我的机器上试了如下代码。

    PRINTDLG pd;
    HWND hwnd;
    // Initialize PRINTDLG
    ZeroMemory(&pd, sizeof(pd));
    pd.lStructSize = sizeof(pd);
    pd.hwndOwner   = ::GetActiveWindow();
    pd.hDevMode    = NULL;     // Don't forget to free or store hDevMode.
    pd.hDevNames   = NULL;     // Don't forget to free or store hDevNames.
    pd.Flags       = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC; 
    pd.nCopies     = 1;
    pd.nFromPage   = 0xFFFF; 
    pd.nToPage     = 0xFFFF; 
    pd.nMinPage    = 1; 
    pd.nMaxPage    = 0xFFFF;  
    if (PrintDlg(&pd)==TRUE) 
    {
        // GDI calls to render output. 
        // Delete DC when done.
        DeleteDC(pd.hDC);
    }
    

    弹出了如下的 Print Dialog:

     

     

    希望我的回复对你有所帮助。

    祝你好运!

     


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 sufer 2012年2月24日 1:31
    2011年12月15日 3:42

全部回复

  • 苏福你好!

    我打开了你给的链接,定位到了“Display the Print Dialog Box”部分。但是你给的代码却和“Setting Up the Printed Page”部分的代码相似。

    我在我的机器上试了如下代码。

    PRINTDLG pd;
    HWND hwnd;
    // Initialize PRINTDLG
    ZeroMemory(&pd, sizeof(pd));
    pd.lStructSize = sizeof(pd);
    pd.hwndOwner   = ::GetActiveWindow();
    pd.hDevMode    = NULL;     // Don't forget to free or store hDevMode.
    pd.hDevNames   = NULL;     // Don't forget to free or store hDevNames.
    pd.Flags       = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC; 
    pd.nCopies     = 1;
    pd.nFromPage   = 0xFFFF; 
    pd.nToPage     = 0xFFFF; 
    pd.nMinPage    = 1; 
    pd.nMaxPage    = 0xFFFF;  
    if (PrintDlg(&pd)==TRUE) 
    {
        // GDI calls to render output. 
        // Delete DC when done.
        DeleteDC(pd.hDC);
    }
    

    弹出了如下的 Print Dialog:

     

     

    希望我的回复对你有所帮助。

    祝你好运!

     


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 sufer 2012年2月24日 1:31
    2011年12月15日 3:42
  • 当你再点击Print的时候,接下来的工作怎么进行呢,到底怎么打印?

    主要是这里。


    苏福
    2011年12月15日 5:42
  • 你提供的链接中,有实现显示打印对话框的,有设置打印属性的,有设置打印页的,就没找到关于打印的东西。

    你应该自己实现打印的功能,如果遇到什么困难或者编译连接的时候出现了什么错误可以贴出来。这样才能更快的解决问题。

    你可以参考一下这个链接上的内容:

    http://www.lessanvaezi.com/changing-printer-settings-using-the-windows-api/

    2011年12月16日 8:09