2011-12-05 15 views
1

我有一個派生自CView的類,它調用OnFilePrint(),但似乎只有一個副本被打印,無論我在打印中輸入了多少對話。這是一個已知的錯誤,還是我做錯了什麼?MFC CView :: OnFilePrint將不會打印多個副本

我可能會創建自己的CPrintDialog,但我不太清楚如何實際上讓它像「打印」一樣。以下是什麼?

CString PrinterName; 
CString SelectedPrinter; 
CPrintDialog dlg(FALSE); 

int nCopies = 1; 
if(IDOK != dlg.DoModal()) 
    return; 
nCopies = dlg.GetCopies(); 

for(int i=0;i<nCopies;i++) 
    //do something?? 

我在想什麼?另外,如果用戶選擇一臺pdf打印機,我將如何防止代碼提示用戶輸入文件保存位置「nCopies」次?

感謝您的幫助!

回答

1

我原以爲任何現代版本的Windows都會處理打印處理器中的副本,並減輕程序的負擔(就像它與帶狀打印機一樣)。但是你的問題表明否則。

我的記憶是生鏽的,但是,據我所知,一些打印機(或他們的驅動程序)將複製,但其他人需要該程序來完成它。該對話框通過設置DEVMODE中的dmCopies字段來捕獲用戶的意圖。

程序應該與驅動程序一起檢查它是否支持多個副本。如果是這樣,只需傳入DEVMODE。如果沒有,那麼你需要一個類似你所顯示的循環(並且你將DEVMODE dmCopies字段重置爲1)。

我忘記了如何詢問驅動程序是否支持副本。也許它與檢查DM_COPIES位是否在默認DEVMODE的dmFields中設置有關。我記得在十六位糟糕的日子裏,很多司機聲稱支持拷貝,但實際上並沒有這樣做。我當時的應用程序有一個驅動程序列表,說他們可以做副本,但不能。

+0

您對機械的描述是正確的。問題是,這一切都應該由MFC的View框架來處理。你的代碼不需要打開「打印」對話框,更不用說處理返回的DEVMODE。 –

+0

那麼,這只是我的代碼庫中的東西,然後呢?我承認這是一個很高的可能性,但我實際上只是調用CView :: OnFilePrint()。或者我可以以某種方式從對話中獲取數據,然後默默打印,而無需再次打開對話框? – Jordan

+0

@Mark Ransom:啊,我明白了。我從來沒有使用MFC,但我做了很多Win32打印。那麼可能是一個有問題的司機。我想知道喬丹是否曾在多臺打印機上使用過它。 –