所有印表機驅動程式都包含一個稱為ExtDeviceMode的輸出函式,它呼叫對話方塊並儲存使用者輸入的資訊。有些印表機驅動程式也將這些資訊儲存在系統登錄的自己擁有的部分中,有些則不然。那些儲存資訊的印表機驅動程式在下次執行Windows時將存取該資訊。
允許使用者選擇印表機的Windows程式通常只呼叫PrintDlg(本章後面我會展示用法)。這個有用的函式在準備列印時負責和使用者之間所有的通訊工作,並負責處理使用者要求的所有改變。當使用者單擊「Properties」按鈕時,PrintDlg還會啟動屬性表格對話方塊。
程式還可以通過直接呼叫印表機驅動程式的ExtDeviceMode或ExtDeveModePropSheet函式,來顯示印表機的屬性對話方塊,然而,我不鼓勵您這樣做。像DEVCAPS2那樣,透過呼叫PrinterProperties來啟動對話方塊會好得多。
PrinterProperties要求印表機物件的代號,您可以通過OpenPrinter函式來得到。當使用者取消屬性表格對話方塊時,PrinterProperties傳回,然後使用者通過呼叫ClosePrinter,釋放印表機代號。DEVCAPS2就是這樣做到這一點的。
程式首先取得剛剛在Device功能表中選擇的印表機名稱,並將其存入一個名為szDevice的字元陣列中。
GetMenuString ( hMenu, nCurrentDevice, szDevice,
sizeof (szDevice) / sizeof (TCHAR), MF_BYCOMMAND) ;
然後,使用OpenPrinter獲得該設備的代號。如果呼叫成功,那么程式接著呼叫PrinterProperties啟動對話方塊,然後呼叫ClosePrinter釋放設備代號:
if (OpenPrinter (szDevice, &hPrint, NULL))
{
PrinterProperties (hwnd, hPrint) ;
ClosePrinter (hPrint) ;
}