【问题标题】:CHtmlView Navigate2 and ExecWB ExecutionCHtmlView Navigate2 和 ExecWB 执行
【发布时间】:2014-04-24 19:43:16
【问题描述】:

这是链接到我之前的问题。

我已经设法为我的应用程序生成的报告的新型视图创建了一个从 CHtmlView 派生的新视图,但我在新视图中发现了一些问题

class CMyHtmlView : public CHtmlView
{
protected: // create from serialization only
    CMyHtmlView();
    DECLARE_DYNCREATE(CMyHtmlView)

// Attributes
public:
    CReportDoc* GetDocument();

    CString          m_sFileName;

// Operations
public:

// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CMyHtmlView)
    public:
    virtual void OnDraw(CDC* pDC);  // overridden to draw this view
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    protected:
    virtual void OnInitialUpdate(); // called first time after construct
    virtual void OnFilePrintPreview();
    virtual void OnFilePrint();
    //}}AFX_VIRTUAL

// Implementation
public:
    virtual ~CMyHtmlView();
    //{{AFX_MSG(CMyHtmlView)
        // NOTE - the ClassWizard will add and remove member functions here.
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

void CMyHtmlView::OnFilePrintPreview()
{   
    // Before this I will call a Function Generate a HTML File in a Location and Updated in m_sFileName
    Navigate2(m_sFileName);
    ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_PROMPTUSER, NULL, NULL );
}

void CMyHtmlView::OnInitialUpdate()
{
    CHtmlView::OnInitialUpdate();
    Navigate2(_T("about:blank"));
}

void CMyHtmlView::OnFilePrint()
{
    // Before this I will call a Function Generate a HTML File in a Location and Updated in m_sFileName
    Navigate2(m_sFileName,NULL,NULL);
    CHtmlView::OnFilePrint();
}

在此打印中OnFilePrint() 可以正常工作。但问题存在于OnFilePrintPreview()

问题来了:

Navigate() 之后调用ExecWB() 在应用程序中仅生成基于HTML 视图的窗口,不显示打印预览窗口

我做错了吗?

【问题讨论】:

  • 不清楚你在问什么。你能澄清一下吗?
  • Navigate() 是一个异步操作。在调用打印预览之前,您必须等待“导航完成”回调。

标签: internet-explorer visual-c++ mfc visual-c++-6 print-preview


【解决方案1】:

我找到了在 Navigate() 之后结束打印和打印预览问题的方法。正如 user1793036 提到的,这是一个异步调用,我需要等待该操作完成。这就是打印预览和打印加载空白页面的原因。

我发现了事件 OnNavigateComplete2() 并被如下覆盖,以便轻松进行打印/预览操作。

void CMyHtmlView::OnNavigateComplete2(LPCTSTR strURL)
{
    if(m_ePrintMode == PREVIEW)
        ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_PROMPTUSER, NULL, NULL );
    else if(m_ePrintMode == PRINT)
        CHtmlView::OnFilePrint();
    else
        return;
}

并将我的打印和打印预览事件修改为

void CMyHtmlView::OnFilePrintPreview()
{
    OnSaveHtmlReport();

    m_ePrintMode = PREVIEW; // an Enum

    Navigate2(m_sFileName);
}

void CMyHtmlView::OnFilePrint()
{
    OnSaveHtmlReport();

    m_ePrintMode = PRINT; // an Enum

    Navigate2(m_sFileName,NULL,NULL);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2011-11-10
    • 2012-02-19
    相关资源
    最近更新 更多