編者:李國帥
qq:9611153 微信lgs9611153
時間:2011-7-26
問題描述及期望效果:
場景是這樣的,使用CHtmlView嵌入googlemap js,用來顯示地圖。然後希望把地圖打印出來。
如果使用ie函數打印地圖經常有問題,還不如直接打印圖片,查詢一下vc下面打印圖片的方法。
ie打印問題
ie打印預覽經常有些不能顯示的方塊
打印類
直接使用CPaintDialog打印不能預覽
借用文檔視圖打印圖片不知道具體方法。
這裏使用了名叫CQPrint的第三方控件,不過遇到了打印清晰度問題
如果在獲取打印位圖的時候,使用了
memDC.BitBlt(0,0,sz.cx, sz.cy,pdc,0,0,SRCCOPY) ;//保存原有DDB,並選入新DDB入DC
然後StretchDIBits,把圖片的像素轉化爲紙張的像素,到時圖像模糊,顏色失真。
我估計是StretchDIBits設備無關縮放導致的,那就先使用設備相關縮放StretchBlt拉伸之後再打印。
如果把StretchBlt放在prt.Dialog()之後打印出來圖像就會被遮擋。所以拷屏操作BitBlt要提前進行。
可以把屏幕區域放大後放在位圖裏,再打印到特定紙張,就會更加清晰。
因爲在prt.Dialog()之前無法使用
HDC hPrinterDC = prt.GetPrivateDC()->m_hDC;
LONG nWidthPaper = (-MulDiv(r.Width(), -GetDeviceCaps(hPrinterDC,LOGPIXELSX),72));
LONG nHeightPaper =(-MulDiv(r.Height(), -GetDeviceCaps(hPrinterDC,LOGPIXELSY), 72));
CSize szPaper(nWidthPaper,nHeightPaper);
獲取縮放後的大小,所以暫時設定整體縮放4.5倍,能把所有的圖像顯示出來。
所需資源:
VC,GoogleMap Js, CQPrint
詳細說明:
總結
不光是web地圖的打印,mfc對話不加處理,也會出現不夠清晰的問題,應該是圖像的放大以及像素轉換產生的。