MFC打印問題

<!-- /* Font Definitions */ @font-face {font-family:宋體; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋體"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋體; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:154224042; mso-list-type:hybrid; mso-list-template-ids:1991302868 -1223663908 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1 {mso-level-number-format:alpha-upper; mso-level-text:%1); mso-level-tab-stop:39.0pt; mso-level-number-position:left; margin-left:39.0pt; text-indent:-18.0pt;} @list l0:level2 {mso-level-number-format:alpha-lower; mso-level-text:"%2/)"; mso-level-tab-stop:63.0pt; mso-level-number-position:left; margin-left:63.0pt; text-indent:-21.0pt;} @list l1 {mso-list-id:821124178; mso-list-type:hybrid; mso-list-template-ids:937034332 -477206788 -1030081044 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 {mso-level-tab-stop:18.0pt; mso-level-number-position:left; margin-left:18.0pt; text-indent:-18.0pt;} @list l1:level2 {mso-level-number-format:alpha-upper; mso-level-text:%2); mso-level-tab-stop:39.0pt; mso-level-number-position:left; margin-left:39.0pt; text-indent:-18.0pt;} @list l2 {mso-list-id:830944579; mso-list-type:hybrid; mso-list-template-ids:2028377286 1211245428 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l2:level1 {mso-level-text:%1); mso-level-tab-stop:18.0pt; mso-level-number-position:left; margin-left:18.0pt; text-indent:-18.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} -->

1.       打印預覽方面問題

1)  打印預覽裏的打印按鈕不起作用解決辦法:

我們可以看到在多文檔視圖中的視圖類中有以下消息的處理:

       ON_COMMAND(ID_FILE_PRINT, CEditView::OnFilePrint)

       ON_COMMAND(ID_FILE_PRINT_DIRECT, CEditView::OnFilePrint)

       ON_COMMAND(ID_FILE_PRINT_PREVIEW, CEditView::OnFilePrintPreview)

同樣,在點打印預覽裏的打印的時候會發送 ID_FILE_PRINT 消息,所以我們可以通過處理該消息來實現打印預覽裏的打印功能。

2)  打印預覽裏前一頁和縮小按鈕不起作用解決方案:

此問題的原因在於沒有對 WM_IDLEUPDATECMDUI 消息的處理,要解決此問題,可以在 CView 子類的 OnPrint 函數中發送 WM_IDLEUPDATECMDUI 消息即可。 AfxGetApp()->m_pMainWnd->SendMessageToDescendants(WM_IDLEUPDATECMDUI,(WPARAM)TRUE,0,0,TRUE); 由於 WM_IDLEUPDATECMDUI 消息是在 afxpriv.h 頭文件中定義的,所以必須引入此頭文件才行。

3)  MFC 中打印以及打印預覽的實現過程。

MFC 中, CView 類已經包含了對打印以及打印預覽的控制處理。

打印的處理流程爲:

A) CView::OnFilePrint()

B) BOOL CView::OnPreparePrinting(CPrintInfo* pInfo)

DoPreparePrinting(pInfo)

C) void CView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)

D) void CView::OnPrint(CDC* pDC, CPrintInfo* pInfo)

E) void CView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)

根據上面的打印流程,我們可以看出,只要在我們的視圖類中重載相應的函數,便可以得用 MFC 的內部打印機制來處理我們自己的打印信息

打印預覽的處理流程:

A) CView::OnFilePrintPreview()

B) BOOL CView::OnPreparePrinting(CPrintInfo* pInfo);

DoPreparePrinting(pInfo)

C) void CView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)

D) void CView::OnPrint(CDC* pDC, CPrintInfo* pInfo)

E) void CView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章