win32中使用印表機

2021-07-28 16:25:08 字數 1938 閱讀 3589

在mfc使用印表機相對簡單,此處不多說,現看看在控制台下如何使用列印功能。

獲取所有的印表機:

struct print

;vectormprints;

void getprinters()

//獲取印表機,填充到陣列

if (!enumprinters (dwflags, null, 2, (lpbyte) pprinters,

cbprinters, &cbprinters, &creturned))

//提取印表機資訊,包括驅動名、印表機名、埠名

if (creturned > 0) }

done_refreshing:

localfree (localhandle (pprinters));

}

使用印表機:

開啟印表機,並建立印表機dc:

wchar_t szprinter[max_path];

dword cchprinter(arraysize(szprinter));

//getdefaultprinter(szprinter, &cchprinter);

wcscpy(szprinter, gsystemconfig.mdevicename.getbuffer());

openprinter(szprinter, &hdl, null);

dword size = documentproperties(null, hdl, szprinter, null, null, 0);

devmode = (devmode*)malloc(size);

documentproperties(null, hdl, szprinter, devmode, null, dm_out_buffer);

hdc printerdc = createdc(l"winspool", szprinter, null, devmode);

獲取印表機的尺寸:

width = getdevicecaps(printerdc, horzres);  

height = getdevicecaps(printerdc, vertres);

這裡獲取的尺寸是以畫素為單位的,所有,如果列印引數是按照實際尺寸的,那麼需要根據列印解析度將實際尺寸換算成畫素,因為程式中是以畫素為單位進行文字、影象等繪製。

獲取印表機解析度:

mdpi = getdevicecaps(printerdc, logpixelsx);

列印設定:

devmode->dmorientation   = dmorient_portrait; //列印方向設定成縱向列印  

devmode->dm*****size = dm*****_a4;

列印引數設定之後需要呼叫:

resetdc(printerdc, devmode);
生效。

開始文件,開始一頁

startdoc(printerdc, &info);

startpage(printerdc);

結束一頁:

endpage(printdc);

在開始一頁和結束一頁之間根據排版,繪製內容。這裡與視窗中繪製內容無異,不多說。

列印結束之後:

enddoc(printerdc);

deletedc(printerdc);

closeprinter(hdl);

free(devmode);

關閉文件、印表機。

這裡使用印表機只獲取印表機的名稱就可以了。

WIN32中使用GDI 入門

方法和我前面寫過的vs2013使用gdi 一樣 2 配置 專案 屬性 配置屬性 聯結器 輸入 附加依賴庫中新增 gdiplus.lib 3 新增標頭檔案,放在主函式標頭檔案中,這個位置隨意 include include gdiplus.h using namespace gdiplus pragm...

win10虛擬印表機安裝 虛擬印表機找不到怎麼辦

開啟控制系統 控制面板 依次進入 程式和功能 啟用或關閉windows功能 介面。如圖所示 從開啟的 啟用或關閉windows功能 介面中,找到 microsoft print to pdf 虛擬印表機裝置並進行勾選,點選 確定 按鈕。此時windows將自動搜尋相關元件並完成windows虛擬印表...

JQuery使用印表機列印div

由於工作中需要呼叫印表機列印資料,之前一直使用window.print 這個來列印但是它是整個頁面全部列印。後來感覺效果不太好,後來我就想能不能只列印乙個div中的內容呢?想到這我抓緊上網搜尋起來,發現還真有,我直接選用了jqprint這個外掛程式。上 看看吧 document ready func...