Создать новый дескриптор принтера для печати растрового файла

Я пишу библиотеку DLL в Visual C++, которая имеет функцию, в которой дескриптор принтера передается в качестве параметра. Этот дескриптор принтера (принтер HDC) используется для печати текстового файла. Теперь я хочу отправить еще одно задание на печать (файл растрового изображения) на тот же принтер.

Можем ли мы создать другой дубликат дескриптора существующего дескриптора "принтер", который я могу использовать для запуска нового задания печати.

Я попытался сделать это, создав новый дескриптор с помощью 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;
}

С вышеупомянутой функцией я получаю ниже erros

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

Если я передаю мою новую задание на печать существующему дескриптору, новое задание на печать (изображение bmp) перекрывается с существующей печатью текстового файла. Поэтому я хочу создать новое задание на печать на том же принтере.

Я также проверил функцию "CreateDC", где нам нужно имя принтера или порт принтера. Я на самом деле хочу, чтобы моя программа была динамичной, то есть чтобы получить принтер во время выполнения. Моя DLL будет скопирована на несколько систем и должна иметь возможность автоматически обнаруживать принтер, подключенный к системе. Вот почему я пытаюсь создать новый дубликат дескриптора с существующим дескриптором.

Я буду очень признателен вам, если вы можете предоставить мне какие-либо материалы для решения этой проблемы. Я на самом деле новичок в работе с растровыми изображениями и принтерами.

Спасибо абхинай

РЕДАКТИРОВАТЬ

Как предложил Крейг после включения и перемещения "stdafx.h" в первую строку кода, я могу успешно скомпилировать и запустить программу. Теперь пользователь может выбрать принтер из командной строки.

Я создаю продукт и не хочу, чтобы мой пользователь дважды выбирал принтер для одной и той же задачи. Может кто-нибудь, дайте мне знать, если я могу создать новую ручку для принтера с существующей ручкой.

Заранее спасибо.

0 ответов

Другие вопросы по тегам