在DLL中启动模态对话框时的错误,请高手帮忙 -- 不胜感激

在DLL中启动模态对话框时的错误,请高手帮忙 -- 不胜感激 [问题点数:100分,结帖人gwinner]

  •        
  •        
  •        
  •        
  •        
  •        收藏
  • 回复次数:20
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    MFC的视图打印/预览功能基于CView::OnFilePrint和CView::OnFilePrintPreview这两个函数。 如果要对用户自定义对话框模态)内的子视图进行打印,直接调用该视图的CView::OnFilePrint即可,弹出的“选择打印机”对话框同样也是模态对话框,覆盖在用户对话框上。 如果要对用户对话框内的视图进行预览,直接调用该视图的CView::OnFilePrintPreview后,预览视图(MFC CPreviewView类实例)内虽然预览正常,但是挡住了用户对话框。由于用户对话框模态的,导致预览视图上的“打印...”、“上一页”、“下一页”、“放大”、“缩小”、“单页/双页”和“关闭”等按钮均无法响应鼠标点击,处于“假死”状态。 解决方法: 第一个解决方法是先关闭用户对话框,再启动预览,详见http://download.csdn.net/detail/oliver_zheng/7639379 第二个解决方法仍然保持用户对话框,但是由于对话框模态,无法利用主框架窗口CMainFrame作为预览框架,因此要另外创建并显示一个框架窗口(CFrameWnd的派生类),作为预览窗口。 另外创建的框架窗口类名为CPrintPreviewFrameWnd,其对应的单文档视图是CViewPrintPreview类,利用这些关联信息创建一个单文档模板,利用此单文档模板创建框架窗口,并在其内嵌视图(CViewPrintPreview类)保存原主框架(CMainFrame)、用户对话框和其上需要打印的视图(CTestView)。然后基于CViewPrintPreview类启动预览和打印(具体过程详见第一个解决办法)。由于CViewPrintPreview的各个相关虚函数诸如OnPreparePrinting、OnBeginPrinting、OnPrepareDC、OnPrint和OnEndPrinting都被重载,用于调用真正需要打印的视图CTestView的各自函数,因此CViewPrintPreview实际上只是个“介”视图,是连接预览视图(MFC CPreviewView类)和CTestView的桥梁。 当打印或者预览结束后,关闭自行创建的框架窗口CPrintPreviewFrameWnd,利用CViewPrintPreview类实现保存的信息恢复主框架和用户对话框,恢复打印/预览前的环境。 代码(实现了第二个解决方法)在VC2010下编译通过。第一个解决方法的源码详见http://download.csdn.net/detail/oliver_zheng/7639379

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值