一、PrintDIg
函数功能:该函数显示打印对话框或打印设置对话框。打印对话框使用户指定特殊的打印工作的特点。
打印设置对话框不能应用在新应用程序中,它已经被PageSetupDlg函数创建的打印设置公共对话框所替代。
函数原型:BOOL PrintDIg(LPPRINTDLG Ippd);
参数:
Ippd:指向一个含有初始化对话框信息的PRINTDLG结构。当PRINTDLG函数返回时,此结构含有关用户选择的信息。
返回值:如果用户点击OK按钮,返回值为非零值。由lppd参数指向的PRINTDLG结构中的成员显示用户的选择。如果用户取消或关闭Print或PrinterSetup对话框或错误出现,返回值为零。
二、PrintHookProc
函数功能:该挂钩函数是一个由应用程序或库定义的回调函数,此回调函数与PrintDlg函数一起使用。
函数接收指定给Print公共对话框的缺省对话框函数的消息和通知。LPPWTHOOKPROC类型定义了一个指向此回调函数的指针。PrintHookProc为由应用程序或库定义的函数名的位置占有者。
函数原型:UINT CALLBACK PrintHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM IParam);
参数:
hdlg:指向消息指定给的Print公共对话框窗口的句柄。
uiMsg:标识接收的消息。
wParam:指定有关消息的其他信息、精确的意义由uiMsg参数的值来决定。
IParam:指定有关消息的其他信息、精确的意义由uiMsg参数的值来决定。
返回值:如果挂钩函数返回值为零,缺省对话框函数处理消息;返回非零值,将忽略消息。
三、样例
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_CREATE:
{
}
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case ID_TEST:
{
PRINTDLG pd;
// Initialize PRINTDLG
ZeroMemory(&pd, sizeof(PRINTDLG));
pd.lStructSize = sizeof(PRINTDLG);
pd.hwndOwner = hWnd;
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_ENABLEPRINTHOOK;
pd.nCopies = 1;
pd.nFromPage = 0xFFFF;
pd.nToPage = 0xFFFF;
pd.nMinPage = 1;
pd.nMaxPage = 0xFFFF;
pd.lpfnPrintHook = PrintHook;
if (PrintDlg(&pd)==TRUE)
{
// GDI calls to render output.
// Delete DC when done.
DeleteDC(pd.hDC);
}
}
break;
default:
{
return DefWindowProc (hWnd, message, wParam, lParam) ;
}
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}