当前位置:C++技术网 > 资讯 > 打印程序代码常用的函数或结构体粗讲

打印程序代码常用的函数或结构体粗讲

更新时间:2016-01-26 21:47:21浏览次数:1+次

StartDoc函数开始一个作业:


int StartDoc(
  _In_       HDC     hdc,
  _In_ const DOCINFO *lpdi
);
参数里面,第二个参数相比较第一个参数没那么重要,我们只要指定一个既定且明确的设备描述表,然后引用这个函数就行了。第二个参数是一个结构体变量,我们可以随便定义变量名。



typedef struct {
  int     cbSize;
  LPCTSTR lpszDocName;
  LPCTSTR lpszOutput;
  LPCTSTR lpszDatatype;
  DWORD   fwType;
} DOCINFO, *LPDOCINFO;
具体参数解释请看MSDN,我就不详述了。



CPrintDialog类有三个构造函数,一般来讲都是CPrintDialog(
   BOOL bPrintSetupOnly,
   DWORD dwFlags = PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION,
   CWnd* pParentWnd = NULL 
);
对于CPrintDialog类的对象初始化函数参数中,其中有个构造函数的第二个参数是一个DWORD,我们在这里面可以设置PD_RETURNDEFAULT风格,当我们创建对话框的时候就不会创建默认的windows打印对话框了,当然你也可以直接设置参数为true而不是false。
bPrintSetupOnly
指定标准Windows打印对话框或打印设置对话框是否显示。 将此参数设置为 TRUE 显示了标准Windows打印设置对话框。 设置为可以显示Windows打印对话框的 FALSE。 如果 bPrintSetupOnly 是 FALSE,打印设置选项按钮在打印对话框仍将显示。
dwFlags
可以使用自定义对话框中设置的一个或多个标记,按位组合使用或运算符。 例如,PD_ALLPAGES 标志设置默认打印大小到文档中的所有页。 在参见 Windows SDK 的 PRINTDLG framework有关这些标志的更多信息。
pParentWnd
指针到对话框的父级或所有者窗口。
此函数调用完DoModal函数后,只有两个返回值,要么是IDCANCLE或IDOK;注意哦,这里不用下划线。具体的想了解更多的话,请看MSDN。
在打印程序代码里面,有一个结构体为我们封装了很多的打印基本设置,DEVMODE结构用于进行一些基本的打印设置:
typedef struct _devicemode {
  TCHAR dmDeviceName[CCHDEVICENAME];
  WORD  dmSpecVersion;
  WORD  dmDriverVersion;
  WORD  dmSize;
  WORD  dmDriverExtra;
  DWORD dmFields;
  union {
    struct {
      short dmOrientation;
      short dmPaperSize;
      short dmPaperLength;
      short dmPaperWidth;
      short dmScale;
      short dmCopies;
      short dmDefaultSource;
      short dmPrintQuality;
    };
    struct {
      POINTL dmPosition;
      DWORD  dmDisplayOrientation;
      DWORD  dmDisplayFixedOutput;
    };
  };
  short dmColor;
  short dmDuplex;
  short dmYResolution;
  short dmTTOption;
  short dmCollate;
  TCHAR dmFormName[CCHFORMNAME];
  WORD  dmLogPixels;
  DWORD dmBitsPerPel;
  DWORD dmPelsWidth;
  DWORD dmPelsHeight;
  union {
    DWORD dmDisplayFlags;
    DWORD dmNup;
  };
  DWORD dmDisplayFrequency;
#if (WINVER >= 0x0400)
  DWORD dmICMMethod;
  DWORD dmICMIntent;
  DWORD dmMediaType;
  DWORD dmDitherType;
  DWORD dmReserved1;
  DWORD dmReserved2;
#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
  DWORD dmPanningWidth;
  DWORD dmPanningHeight;
#endif 
#endif 
} DEVMODE, *PDEVMODE, *LPDEVMODE;

具体的请看MSDN

不过,我们得先调用GetDevMode函数来引用这个结构体:

LPDEVMODE dv = dlg.GetDevMode();
接下来的一篇文章,就是利用这个结构体来实现打印方向的控制。
DEVMODE中的一个结构体参数dmFields作用是指定该结构中的某个成员哪些已被初始化。在这里先提一下,下篇文章就详细讲解下。