我正在用visual c ++编写一个DLL库,它有一个功能,其中打印机句柄作为参数传递。此打印机句柄(HDC打印机)用于打印文本文件。现在我想将另一个打印作业(位图文件)发送到同一台打印机。
我们可以创建现有句柄“printer”的另一个句柄副本,我可以使用它来触发新的打印作业。
我尝试过使用PRINTDLG / PRINTDLGEX创建新句柄,但我无法成功
#include <windows.h>
#include "stdafx.h"
#include "ActPlugin.h" //My programs Header file
#include "stdlib.h"
#include <stdio.h>
#include <objidl.h>
#include "QRGenerator.h" // My program's header file
#include <gdiplus.h>
#include <GdiPlusGraphics.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")
bool GetPrinterDC(HDC *Printer)
{
// Display the printer dialog box so the user can select the
// printer and the number of copies to print.
BOOL printDlgReturn = FALSE;
HDC printerDC = NULL;
PRINTDLG printDlgInfo = {0};
LPWSTR localPrinterName = NULL;
PDEVMODE returnedDevmode = NULL;
PDEVMODE localDevmode = NULL;
int localNumberOfCopies = 0;
// Initialize the print dialog box's data structure.
printDlgInfo.lStructSize = sizeof(printDlgInfo);
printDlgInfo.Flags =
// Return a printer device context.
PD_RETURNDC
// Don't allow selecting individual document pages to print.
// Remove this flag if you want to support this feature.
| PD_NOSELECTION;
// Display the printer dialog and retrieve the printer DC.
printDlgReturn = PrintDlg(&printDlgInfo);
// Check the return value.
if (TRUE == printDlgReturn)
{
// The user clicked OK so the printer dialog box data
// structure was returned with the user's selections.
// Copy the relevant data from the data structure and
// save them to a local data structure.
//
// Get the HDC of the selected printer
printerDC = printDlgInfo.hDC;
}
if (printerDC != NULL)
{
return false;
}
printer = &printerDC;
return true;
}
通过以上功能,我得到了错误
virtual printer sdk\sample\actplugin\c++\actplugin.cpp(154): error C2065: 'PrintDlgEx' : undeclared identifier
1>c:\program files\actmask virtual printer sdk\sample\actplugin\c++\actplugin.cpp(154): error C2146: syntax error : missing ';' before identifier 'printDlgInfo'
1>c:\program files\actmask virtual printer sdk\sample\actplugin\c++\actplugin.cpp(154): error C2065: 'printDlgInfo' : undeclared identifier
如果我将新的printjob提供给现有句柄,则新的打印作业(bmp图像)与现有的文本文件打印重叠。因此,我想为同一台打印机创建一个新的打印作业。
我还检查了“CreateDC”功能,我们需要打印机名称或打印机端口。我实际上希望我的程序是动态的,即在运行时获取打印机。我的DLL将被复制到多个系统,并且应该能够自动检测连接到系统的打印机。 这就是我试图用现有句柄创建一个新的重复句柄的原因。
如果您能为我提供解决此问题的任何意见,我将非常感谢您。 我实际上是处理位图图像和打印机的新手。
由于 Abhinay
修改
正如craig在将“stdafx.h”包含并移动到第一行代码后建议的那样,我能够成功编译并运行该程序。用户现在可以从提示中选择打印机。
我正在构建产品,我不希望我的用户为同一任务选择两次打印机。任何人都可以告诉我,如果我可以使用现有句柄创建新的打印机句柄。
提前致谢。