2013-03-25 42 views
2

我想更改CPrintDialog的屬性,當打印機從我的應用程序更改時。如何更改自定義的CPrintDialog的屬性

我在自定義CPrintDialog的OnInitDialog()中設置了打印機名稱。

CComboBox *wndCmbBox = (CComboBox *)GetDlgItem(IDC_PER_USER); 
if(wndCmbBox != NULL) 
{ 
    wndCmbBox->SelectString(-1, s_PrinterName); 
} 

問題是,打印機名稱可以在組合框中設置,但其屬性未設置。 我的意思是說,打印機狀態,類型等... 默認情況下,默認打印機的屬性設置。所以,它的衝突。

但是,如果我從CPrintDialog的組合框中更改打印機,然後根據打印機選擇自動更改它的屬性。

我不知從哪裏找到任何解決方案。請參考我附上的圖片。

CPrintDialog

編輯 作爲科迪建議,我可以從我的應用程序改變了打印機按照所選的打印機,即使我申請打印命令,然後打印從選定的打印機進入,這一切都順利, 但這不是問題,問題是,在第一次打開打印對話框時,如果從我的應用程序中選擇了其他默認打印機,則其屬性與所選打印機不匹配。

回答

0

最後我已經解決了我的打印機禮儀的問題。

我已經在doModal()之前初始化m_pd結構之後加入了這段代碼。

HGLOBAL hDevMode = NULL; 
HGLOBAL hDevNames = NULL; 
if (GetPrinterDevice(CurrentPrinterName.GetBuffer(), &hDevNames, &hDevMode)) 
{ 
    AfxGetApp()->SelectPrinter(hDevNames, hDevMode); 

} 

我通過hDevModehDevNamesGetPrinterDevice()功能。

其工作正常,沒有任何副作用。

仍然溫暖感謝@Cody Gray@roger_rowland的支持.. :)

7

你做錯了。您應該而不是通過顯示打印機對話框並以編程方式操作其控件來自定義打印設置。這肯定會出錯,就像你觀察到的那樣。這不是通用對話框的預期使用模型。

相反,通過修改其m_pd結構設置爲默認CPrintDialog值,如在the documentation描述:

要使用CPrintDialog對象,首先創建使用CPrintDialog構造的對象。一旦構造完對話框,就可以設置或修改m_pd結構中的任何值,以初始化對話框控件的值。 m_pd結構的類型爲PRINTDLG。有關此結構的更多信息,請參閱Windows SDK。

您還可以以編程方式更改整個應用程序的默認打印機。這不需要顯示任何對話框。爲此,請致電SelectPrinter函數。這將設置新的打印機並釋放先前選擇的打印機。

完成此操作後,無論何時顯示打印對話框,它都會自動將指定的打印機顯示爲選定狀態。當您檢索有關所選打印機的信息時,您將檢索到的信息將應用於正確的打印機。

查找MSDN文章中的詳細信息:How to programmatically print to a non-default printer in MFC

+0

嘿,夥計,我嘗試了所有你認爲上面的方法,但是我的問題沒有解決。需要一些更多的幫助.. – 2013-04-04 13:18:45

+0

你究竟做了什麼?什麼地方出了錯?你還沒有用更多的代碼更新這個問題,而且我坐得太遠而無法看到你的電腦屏幕。 – 2013-04-05 03:42:15

+1

@AB Bolim - 說實話,在我看來,科迪告訴了你在回答你的問題時需要知道的一切。恕我直言,你應該做光榮的事情,並接受它。 – 2013-04-05 04:48:36

相關問題