我在学习《深入浅出MFC》时遇到了一些问题,书是第二版的,简体中文,华中科技大学出版社
我用的环境是VC++6.0第12章 打印与预览
作者在第500页中提到:“显然,当【File/Pring...】被按下时,命令消息将流往CView::OnFilePrint去处理”,在第508页中又提到:“当使用者按下【File/Print】命令项后,Application Framework首先调用CMyView::OnPreparePrinting。”于是我想,应用程序应该是先调用CView::OnFilePrint,然后在其中调用CMyView::OnPreparePrinting,为了证实我的想法,我在这两个函数中各放置了一条TRACE宏输出提示信息,然后调试。但是奇怪的事情发生了,CMyView::OnPreparePrinting中的TRACE宏正常输出,CView::OnFilePrint中的却根本没有输出,难道系统没有调用CView::OnFilePrint么?
mfc打印

解决方案 »

  1.   

    先调用CView::OnFilePrint,然后在其中调用CMyView::OnPreparePrinting
    ----------------------------------------------CView::OnFilePrint里面应该不会有cmyview的代码的还有lz 多态好像没搞清楚
      

  2.   

    CView是MFC的框架代码,链接的时候链接的是MFC的库,你修改CView代码无效。另外貌似只有CView::OnPrint
    方法。
    打印过程:
      

  3.   

    我怎么找不到CView::OnFilePrint的源代码?
      

  4.   

    MSDN里面CView的classmember里确实没有OnFilePrint,但是MFC自动生成的代码中有这样一段内容:
    BEGIN_MESSAGE_MAP(CGraphView, CView)
            //{{AFX_MSG_MAP(CGraphView)
                    // NOTE - the ClassWizard will add and remove mapping macros here.
                    //    DO NOT EDIT what you see in these blocks of generated code!
            //}}AFX_MSG_MAP
            // Standard printing commands
            ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
            ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
            ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
    END_MESSAGE_MAP()
    从这段代码来看,当【File/Pring...】被按下时,命令消息似乎是流往CView::OnFilePrint去处理了,所以我才会产生一开始的疑惑。不过现在我清楚了,按照CView::OnFilePrint的代码,框架的确是按你图中的顺序来执行打印操作的。
      

  5.   

    OnFilePrint是一个命令消息的响应函数,就是点击菜单就去调用这个函数,内部流程就是我贴的图,来自MSDN所以说MSDN就是微软开发者的圣经。