CHtmlView printing in CDialog?
Hi, all:
I tried to load an html file into a CHtmlView control on CDialog and
print it out. I dynamic create the CHtmlView in the OnInitDialog
event and the CHtmlView load the htm file successfully. But I has
problems to print the html to a printer?
I tried :
pView->ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, NULL, NULL); it
does nothing.
pView->OnFilePrint(); it print an empty page. (The html should print 9
pages)
I also tried:
LPOLECOMMANDTARGET lpTarget = NULL;
LPDISPATCH lpDisp = pView->GetHtmlDocument();
if (lpDisp != NULL)
{
// the control will handle all printing UI
if (SUCCEEDED(lpDisp->QueryInterface(IID_IOleCommandTarget,
(LPVOID*) &lpTarget)))
{
lpTarget->Exec(NULL, OLECMDID_PRINT, 0, NULL, NULL);
lpTarget->Release();
}
lpDisp->Release();
}
It print an empty page.
But if I added pView->OnFilePrint(); 2 printer dialog popup and it
will print an empty page plus the 9 pages of html.
Anyone can help me with this problem?
Following is the code
BOOL CHtmlViewDlg::OnInitDialog()
{
CString strAppPath = AfxGetApp()->m_pszHelpFilePath;
strAppPath = strAppPath.Left(strAppPath.ReverseFind('\\'));
RECT rc;
GetClientRect(&rc);
CFrameWnd * pfrm = (CFrameWnd*) RUNTIME_CLASS(CFrameWnd)-
CreateObject();
pfrm->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rc, this);
CCreateContext pContext;
pContext.m_pNewViewClass = RUNTIME_CLASS(CHtmlView);
CHtmlView *pView = (CHtmlView *) pfrm->CreateView(&pContext);
if(!pView)
{
//IE4 probably not installed, view couldn't be created
//Just open the HTML document with the standard HTML viewer
ShellExecute(m_hWnd, _T("open"), strAppPath + _T("\\print.htm"),
NULL, NULL, SW_MAXIMIZE);
EndDialog(IDCANCEL);//without HTML page the dialog is useless,
destroy it
return FALSE;
}
pView->Navigate(strAppPath + _T("\\print.htm"));
//pView->ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, NULL, NULL);
LPOLECOMMANDTARGET lpTarget = NULL;
LPDISPATCH lpDisp = pView->GetHtmlDocument();
if (lpDisp != NULL)
{
if (SUCCEEDED(lpDisp->QueryInterface(IID_IOleCommandTarget,
(LPVOID*) &lpTarget)))
{
lpTarget->Exec(NULL, OLECMDID_PRINT, 0, NULL, NULL);
lpTarget->Release();
}
lpDisp->Release();
}
// pView->OnFilePrint();
return TRUE;
}
--------------------
thanks in advance
-rockdale
-------------------