CHtmlView Navigate2 и выполнение ExecWB

Это ссылка на мой предыдущий вопрос.

Мне удалось создать новое представление, полученное из 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().

Вот проблема:

При вызове ExecWB() после того, как Navigate() создает в приложении только окно на основе HTML, окно предварительного просмотра не отображается

Я делаю что-то не так?


person Sathish Guru V    schedule 24.04.2014    source источник
comment
Непонятно, что вы спрашиваете. Вы можете уточнить?   -  person cha    schedule 28.04.2014
comment
Navigate() — это асинхронная операция. Вы должны дождаться обратного вызова «навигация завершена», прежде чем вызывать предварительный просмотр печати.   -  person user1793036    schedule 28.04.2014


Ответы (1)


Я нашел способ решить проблему с печатью и предварительным просмотром печати после Navigate(). Как упомянул пользователь 1793036, это асинхронный вызов, и мне нужно дождаться завершения этой операции. Это причина того, что Предварительный просмотр и печать печати загружают пустую страницу.

Я нашел событие 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);
}
person Sathish Guru V    schedule 29.04.2014