2014-04-24 5 views
0

이것은 이전 질문과 연결됩니다.CHtmlView Navigate2 및 ExecWB 실행

나는() 내 응용 프로그램에 대한보기의 새로운 유형에 대한했지만 CHtmlView에서 파생 된 새로운 뷰를 만들기 위해 관리 보고서를 생성하지만이 인쇄 OnFilePrint에서 새로운보기

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(); 
} 

에서 soem 문제를 찾을 수있다 어떤 문제없이 일하고있다. 그러나 문제는 OnFilePrintPreview()에 있습니다. 내가 잘못 아무것도 오전에는 인쇄 미리보기 창이

을 표시되지

이동 후 때는 ExecWB를()() 앱만을 HTML보기를 기반으로 창을 만드는 호출에 : 여기

문제인가?

+0

나의 인쇄 및 인쇄 미리보기 이벤트를 수정했습니다. 당신은 명확히 할 수 있습니까? – cha

+1

'Navigate()'는 비동기 작업입니다. 인쇄 미리보기를 호출하기 전에 '탐색 완료'콜백을 기다려야합니다. – user1793036

답변

0

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); 
}