


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、對話框程序調用Frame框架實現打印的具體細節(jié)網上搜索了幾天關于對話框的打印問題大部分都抄來抄去的實現對話框所見即所得模式,其實就是在對話框上繪制一般還是使用打印預覽然后打印的功能吧.咱們就一步一步的來實現吧.最后本文給出一個可行的方案,也是網上收集的例子.PS:由于個人修改的所以改掉了類名也算一遍梳理吧.再PS:程序編譯可能還會有一些小錯誤,一般是符號不同造成的了例如雙引號,括號的全半角差異-II下面進入正題:1用MFC應用向導創(chuàng)建對話框應用程序,設主對話框類為MyPrintPreviewDIg程序名稱為MyPrintPreview),在主對話框上放一按鈕,(標題:打印預覽,ID:IDC_B
2、TN_PREVIEW),用類向導增加其BN_CLICKED的消息響應函數OnButtonPreview生成打印預覽界面voidCMyPrintPreviewDlg:OnButtonPreview()CSevFrame*pf=newCSevFrame(this);/CSevFrame稍候介紹2、增加新類:用ClassWizard新建CSevFrame類(基類CFrameWnd),功能上相當于文檔視圖的應用程序的框架窗口類用ClassWizard新建CSevView類(基類CScroIIView)功能上相當于文檔視圖的應用程序的視圖類增加CSevPreviewView類(此類后面已經給出)基類CP
3、reviewView(我就沒找到這個類),注意在頭其定義頭文件中加入包含afxpriv.h),用于打印預覽界面的視圖類。3、對新生成的各類修改如下:CSevFrame類:增加公有數據成員CMyPrintPreviewDlg*m_pOIdWnd用于保存主對話框對象;CSevView*mpView;/用于保存視圖類對象;由于存在CMyPrintPreviewDlg類HCSevView類,所以要包含兩個頭文件includeCMyPrintPreviewDlg.hincludeCSevView.h重載構造函數,保存對主對話框對象指針,創(chuàng)建窗口/頭文件聲明CSevFrame(CMyPrintPrevie
4、wDlg*pOld);cpp文件定義CSevFrame:CSevFrame(CMyPrintPreviewDlg*pOld)m_pOldWnd=pOld;if(!Create(NULL,打印預覽,WS_OVERLAPPEDWINDOW|FWS_ADDTOTITLE,CRect(200,200,500,500)TRACE0(Failedtocreateviewwindown);修改析構函數,讓主對話框顯示CSevFrame:CSevFrame()m_pOldWnd-ShowWindow(SW_SHOW);用ClassWizard增加WM_CREATE消息處理函數,關聯(lián)CSevView視圖對象;調
5、用其OnFilePrintPreview函數進行打印預覽若要直接打印,可直接向其發(fā)送消息;隱藏主對話框。此項照著copy就好了嘿嘿intCSevFrame:OnCreate(LPCREATESTRUCTlpCreateStruct)if(CFrameWnd:OnCreate(lpCreateStruct)=-1)return-1;CCreateContextcontext;context.m_pNewViewClass=RUNTIME_CLASS(CSevView);context.m_pCurrentFrame=this;context.m_pCurrentDoc=NULL;context.
6、m_pLastView=NULL;m_pView=STATIC_DOWNCAST(CSevView,CreateView(&context);if(m_pView!=NULL)mView-ShowWindow(SW_SHOW);SetActiveView(m_pView);Setlcon(m_pOldWnd-GetIcon(FALSE),FALSE);Setlcon(m_pOldWnd-GetIcon(TRUE),TRUE);ShowWindow(SW_MAXIMIZE);CWinApp*pApp=AfxGetApp();pApp-m_pMainWnd=this;m_pView-OnFileP
7、rintPreview();mView-SendMessage(WM_COMMAND,ID_FILE_PRINT);直接打印m_pOldWnd-ShowWindow(SW_HIDE);return0;修改CSevView類修改構造函數:將坐標射模式置為缺省模式。CSevView:CSevView()m_nMapMode=MM_TEXT;增加消息映射實現打印。ONCOMMAND(IDFILEPRINT,CViewQnFilePrint)重載虛函數OnPreparePrinting,調申DoPreparePrinting牛成申干打印或打印預覽的設備描述表。BOOLCSevView:OnPrepar
8、ePrinting(CPrintInfo*pInfo)returnDoPreparePrinting(pInfo);增加公有函數OnFilePrintPreview,調用DoPrintPreview實現打印預覽,該函數需要傳入四個參數:1打印預覽工具條資源ID,2執(zhí)行打印及打印預覽的視圖對象指針,3打印預覽界面視圖類的CRuntimeClass指針,I4打印預覽狀態(tài)類CPrintPreviewState對象扌指針。voidCSevView:OnFilePrintPreview()CPrintPreviewState*pState=newCPrintPreviewState;pState-lpf
9、nCloseProc=_AfxMyPreviewCloseProc/設置打印預覽窗口關閉時的調用函數;if(!DoPrintPreview(AFX_IDD_PREVIEW_TOOLBAR,this,RUNTIME_CLASS(CSevPreviewView),pState)TRACE0(Error:DoPrintPreviewfailed.n);AfxMessageBox(AFX_IDP_COMMAND_FAILURE);deletepState;在Myviewcpp文件中增加全局函數,AfxMyPreviewCloseProc,當單擊打印預覽窗口關閉按鈕時被調用。/頭文件聲明BOOLCALL
10、BACK_AfxMyPreviewCloseProc(CFrameWnd*pFrameWnd);/cpp文件定義BOOLCALLBACK_AfxMyPreviewCloseProc(CFrameWnd*pFrameWnd)ASSERT_VALID(pFrameWnd);CSevPreviewView*pView=(CSevPreviewView*)pFrameWnd-GetDlgItem(AFX_IDW_PANE_FIRST);ASSERT_KINDOF(CPreviewView,pView);pView-OnPreviewClose();returnFALSE;4、修改CSevPreview
11、View類,增加工具欄按鈕的消息響應函數OnPreviewClose(),OnPreviewPrint(),由干此類較簡單,列出該類代碼如下(注意粗體部分):SevPreviewViewh/SevPreviewView.h:interfacefortheCSevPreviewViewclass./if!defined(AFX_MYPREVIEWVIEW_H_0AE8B670_B1AE_11DA_812E_00E04C39032F_INCLUDEDdefineAFX_MYPREVIEWVIEW_H_0AE8B670_B1AE_11DA_812E_00E04C39032F_INCLUDED_if_
12、MSC_VER1000pragmaonceendif/_MSC_VER1000includeclassCSevPreviewView:publicCPreviewViewDECLARE_DYNCREATE(CSevPreviewView)public:afx_msgvoidOnPreviewClose();protected:CSevPreviewView。;virtualCSevPreviewView();voidOnDraw(CDC*pDC);voidCSevPreviewView:OnEndPrintPreview(CDC*pDC,CPrintInfo*pInfo,POINTpoint,
13、CPreviewView*pView);afx_msgvoidOnPreviewPrint();DECLARE_MESSAGE_MAP();endif/!defined(AFXMYPREVIEWVIEWH0AE8B670B1AE11DA812E00E04C39032FINCLUDED)SevPreviewView.cpp/SevPreviewView.cpp:implementationoftheCSevPreviewViewclass.includestdafx.h#includeSevPrintPreviewDlg.hincludeSevPreviewView.h#includeSevFr
14、ame.hifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE=_FILE_;definenewDEBUG_NEWendif/IMPLEMENT_DYNCREATE(CSevPreviewView,CPreviewView)CSevPreviewView:CSevPreviewView()CSevPreviewView:CSevPreviewView()BEGIN_MESSAGE_MAP(CSevPreviewView,CPreviewView)ON_COMMAND(AFX_ID_PREVIEW_CLOSE,OnPreviewClose)ON_COMMAN
15、D(AFX_ID_PREVIEW_PRINT,OnPreviewPrint)END_MESSAGE_MAP()voidCSevPreviewView:OnDraw(CDC*pDC)CPreviewView:QnDraw(pDC);m_pToolBar-PostMessage(WM_IDLEUPDATECMDUI,(WPARAM)TRUE)控制條的命令狀態(tài)更新voidCSevPreviewView:OnEndPrintPreview(CDC*pDC,CPrintInfo*pInfo,POINTpoint,CPreviewView*pView)CPreviewView:OnEndPrintPreview(pDC,pInfo,point,pView);voidCSevPreviewView:OnPreviewClose()CSevFrame*pf=(CSevFrame*):AfxGetMainWnd();CWinApp*pApp=AfxGetApp();pApp-m_pMainWnd=pf-m_pOldWnd;原文漏掉幾個字母pf-DestroyWindow();voidCSevPreviewView:OnPreviewPrint()m_pPrintView-SendMessage(WM_COMMAND,ID_FILE_PRINT);至此,基于對話框應用程序的具有打印及打印預
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 東陽光筆試題目及答案
- 小學六年級語文調研題目及答案
- 統(tǒng)計學中的評分標準與評估試題及答案
- 汽車維修工考試知識點解析試題及答案
- 企業(yè)中高層管理培訓
- 2024年食品質檢員考試策略與準備
- 2024年美容體驗顧客分析試題及答案
- 統(tǒng)計學考試理解常用模型試題及答案
- 2024年二手車評估師考試學習資源與答案
- 找刺猬閱讀測試題及答案
- 快餐店創(chuàng)業(yè)計劃書
- 2025年輔警招聘考試試題庫及答案(全優(yōu))
- 【初中地理】西亞課件-2024-2025學年人教版(2024)七年級地理下冊
- 2024年4月27日福建省事業(yè)單位《綜合基礎知識》真題及答案
- (一模)2025年廣東省高三高考模擬測試 (一) 英語試卷(含官方答案及詳解)
- 退役軍人無人機培訓宣傳
- 退役軍人保密教育
- 《園林微景觀設計與制作》課件-項目二 作品展示
- 本科畢業(yè)論文完整范文(滿足查重要求)城市社區(qū)網格化治理問題研究
- 2025年旅游專業(yè)面試試題及答案
- 液壓升降平臺施工方案
評論
0/150
提交評論