古詩詞大全網 - 個性簽名 - 如何在MFC中獲取當前的打印機設置

如何在MFC中獲取當前的打印機設置

訪問當前打印機的唯壹方法是通過CWinApp中存儲的m_hDevMode和m_hDevNames結構。這些成員由CWinApp派生的類的GetPrinterDeviceDefaults()成員函數通過PRINTDLG結構的指針訪問。因為返回值hDevMode和hDevNames,所以必須調用HGLOBAL變量::GlobalLock()來返回指向該結構的指針。使用這個指針,您可以從結構中提取信息來確定打印機的當前狀態。關於這些結構的內容,請參考SDK中的DEVMODE和DEVNAMES聯機幫助了解更多信息。

下面的代碼示例將使用打印機設置CDC對象上的GetDeviceCaps()返回當前打印機的頁面大小和CView派生類的成員函數:

/*需要編譯選項:無

*/

BOOL cmy view::get pagesize(CSize & amp;nRetVal)

{

print DLG FAR * pPrintDlg = new print DLG;

BOOL bRet = FALSE

//獲取當前打印機的設置。

if(AfxGetApp()-& gt;GetPrinterDeviceDefaults(pPrintDlg))

{

//獲取指向兩個設置結構的指針。

DEVNAMES FAR *lpDevNames =

(DEVNAMES FAR *)::global lock(pPrintDlg-& gt;hdev names);

DEVMODE FAR *lpDevMode =

(DEVMODE FAR *)::global lock(pPrintDlg-& gt;hdev mode);

//獲取具體的驅動信息。

CString SZ driver((LPTSTR)lpDevNames+

lpDevNames-& gt;wDriverOffset);

CString SZ device((LPTSTR)lpDevNames+

lpDevNames-& gt;wDeviceOffset);

CString SZ output((LPTSTR)lpDevNames+

lpDevNames-& gt;wOutputOffset);

//根據當前設置創建CDC對象。

CDC pDC

pDC。CreateDC(szDriver,szDevice,szOutput,lpDevMode);

//查詢此CDC對象以獲取當前的寬度和高度

//頁面。

nRetVal.cx = pDC。GetDeviceCaps(HORZSIZE);

nRetVal.cy = pDC。GetDeviceCaps(VERTSIZE);

//去掉CDC對象。

pDC。DeleteDC();

//解鎖指向設置結構的指針。

* global unlock(pPrintDlg-& gt;hdev names);

* global unlock(pPrintDlg-& gt;hdev mode);

bRet = TRUE

}

刪除pPrintDlg

返回bRet

}