这是我的包含的样子(链接器错误,所以可能与这些无关):
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#define _WIN32_IE 0x0501
#include <windows.h>
#include <CommCtrl.h>
#include "resources.h"
#include <iostream>
#include <string>
#include <vector>
#include <tchar.h>
#include <winspool.h>
以下是我尝试实施的方法:
HRESULT DisplayPrintPropertySheet(HWND hWnd)
{
HRESULT hResult;
PRINTDLGEX pdx = {0};
LPPRINTPAGERANGE pPageRanges = NULL;
pPageRanges = (LPPRINTPAGERANGE) GlobalAlloc(GPTR, 10 * sizeof(PRINTPAGERANGE));
if (!pPageRanges)
return E_OUTOFMEMORY;
pdx.lStructSize = sizeof(PRINTDLGEX);
pdx.hwndOwner = hWnd;
pdx.hDevMode = NULL;
pdx.hDevNames = NULL;
pdx.hDC = NULL;
pdx.Flags = PD_RETURNDC | PD_COLLATE;
pdx.Flags2 = 0;
pdx.ExclusionFlags = 0;
pdx.nPageRanges = 0;
pdx.nMaxPageRanges = 10;
pdx.lpPageRanges = pPageRanges;
pdx.nMinPage = 1;
pdx.nMaxPage = 1000;
pdx.nCopies = 1;
pdx.hInstance = 0;
pdx.lpPrintTemplateName = NULL;
pdx.lpCallback = NULL;
pdx.nPropertyPages = 0;
pdx.lphPropertyPages = NULL;
pdx.nStartPage = START_PAGE_GENERAL;
pdx.dwResultAction = 0;
hResult = PrintDlgEx(&pdx);
if ((hResult == S_OK) && pdx.dwResultAction == PD_RESULT_PRINT)
{
StartDocPrinter(pdx.hDC,1,NULL);
EndDocPrinter(pdx.hDC);
cout << "Printer Succeeeded";
}
if (pdx.hDevMode != NULL)
GlobalFree(pdx.hDevMode);
if (pdx.hDevNames != NULL)
GlobalFree(pdx.hDevNames);
if (pdx.lpPageRanges != NULL)
GlobalFree(pPageRanges);
if (pdx.hDC != NULL)
DeleteDC(pdx.hDC);
return hResult;
}
每次尝试使用StartDoc,EndDoc,StartPage,EndPage,ect.
链接器错误:
obj\Release\main.o:main.cpp|| undefined reference to `StartDocPrinterA@12'|
obj\Release\main.o:main.cpp|| undefined reference to `EndDocPrinter@4'|
||=== Build finished: 2 errors, 15 warnings ===|
答案 0 :(得分:2)
如文档所述,这两个函数需要您链接winspool.lib。因此,你似乎没有这样做。