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作用是指定该结构中的某个成员哪些已被初始化。在这里先提一下,下篇文章就详细讲解下。