123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- // CWebBrowserDlg.cpp : 实现文件
- //
- #include "stdafx.h"
- #include "libwebbrowser.h"
- #include "CWebBrowserDlg.h"
- #include "afxdialogex.h"
- // CWebBrowserDlg 对话框
- IMPLEMENT_DYNAMIC(CWebBrowserDlg, CDialogEx)
- CWebBrowserDlg::CWebBrowserDlg(CWnd* pParent /*=NULL*/)
- : CDialogEx(CWebBrowserDlg::IDD, pParent), m_WebIE(NULL), m_pHost(NULL), m_pICallBack(NULL)/*, m_hLoadEvent(NULL)*/
- {
- }
- CWebBrowserDlg::CWebBrowserDlg(CPrintHostApi *pHost, IWebPrintCallBack* pICallBack, CWnd* pParent/* = NULL*/)
- : CDialogEx(CWebBrowserDlg::IDD, pParent), m_WebIE(NULL), m_pHost(NULL), m_pICallBack(NULL)
- {
- m_pHost = pHost;
- m_pICallBack = pICallBack;
- }
- CWebBrowserDlg::~CWebBrowserDlg()
- {
- }
- void CWebBrowserDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialogEx::DoDataExchange(pDX);
- }
- BEGIN_MESSAGE_MAP(CWebBrowserDlg, CDialogEx)
- ON_MESSAGE(WM_LOADURLMESSAGE, &CWebBrowserDlg::OnLoadUrlMessage)
- ON_MESSAGE(WM_PRINTMESSAGE, &CWebBrowserDlg::OnPrintMessage)
- ON_WM_CLOSE()
- END_MESSAGE_MAP()
- BOOL CWebBrowserDlg::OnInitDialog()
- {
- CDialogEx::OnInitDialog();
- HANDLE hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, _T("WBCreateEvent"));
- if (hEvent)
- {
- SetEvent(hEvent);
- m_pHost->Debug("lytest OK to InitDialog of WebBrowser.");
- }
- bNaviError = FALSE;
- bLoadSucc = FALSE;
-
- ::SetWindowPos(this->GetSafeHwnd(),HWND_TOP,0,0,0,0,SWP_HIDEWINDOW);//HWND_TOP
- return TRUE;
- }
- BEGIN_EVENTSINK_MAP(CWebBrowserDlg, CDialogEx)
- ON_EVENT(CWebBrowserDlg, IDC_EXPLORER1, 271, CWebBrowserDlg::NavigateErrorExplorer1, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
- ON_EVENT(CWebBrowserDlg, IDC_EXPLORER1, 259, CWebBrowserDlg::DocumentCompleteExplorer1, VTS_DISPATCH VTS_PVARIANT)
- ON_EVENT(CWebBrowserDlg, IDC_EXPLORER1, 250, CWebBrowserDlg::BeforeNavigate2Explorer1, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
- ON_EVENT(CWebBrowserDlg, IDC_EXPLORER1, 252, CWebBrowserDlg::NavigateComplete2Explorer1, VTS_DISPATCH VTS_PVARIANT)
- END_EVENTSINK_MAP()
- void CWebBrowserDlg::NavigateErrorExplorer1(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Frame, VARIANT* StatusCode, BOOL* Cancel)
- {
- m_pHost->Debug("lytest Enter NavigateErrorExplorer1");
- // TODO: 在此处添加消息处理程序代码
- //char* strUrl = _com_util::ConvertBSTRToString(URL->bstrVal);
- /*long error = StatusCode->lVal; */
- LONGLONG llCode = StatusCode->llVal;
- if (llCode > 505) // 非HTTP_STATUS
- llCode -= 0x800C0000L;
- ErrorCode error = (ErrorCode)llCode;
- printf("error=%x\n",error);
- // 发生了导航错误
- bNaviError = TRUE;
- }
- // WebBrowser成功Navigate并结束事件
- void CWebBrowserDlg::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)
- {
- m_pHost->Debug("lytest Enter DocumentCompleteExplorer1");
- IUnknown* pUnk;
- LPDISPATCH lpWBDisp;
- HRESULT hr;
- pUnk = m_WebIE->GetControlUnknown();
- hr = pUnk->QueryInterface(IID_IDispatch, (void**)&lpWBDisp);
- if (pDisp == lpWBDisp )
- {
- if(m_WebIE->get_ReadyState() == READYSTATE_COMPLETE && m_WebIE->get_Busy() == FALSE){
- //SetEvent(m_hLoadEvent); // add by ly
- m_pHost->Debug("lytest last Enter DocumentCompleteExplorer1");
- if (bNaviError == TRUE)
- {
- bLoadSucc = FALSE;
- m_pICallBack->LoadCallBack(FALSE);
- }
- else
- {
- bLoadSucc = TRUE;
- m_pICallBack->LoadCallBack(TRUE);
- }
- bNaviError = FALSE; // 还原错误状态标志
- }
- }
- lpWBDisp->Release();
- }
- afx_msg LRESULT CWebBrowserDlg::OnLoadUrlMessage(WPARAM wParam, LPARAM lParam)
- {
- CString Url = (LPCTSTR)lParam; //"C:\\打印预览.htm";
- m_pHost->Debug("[Got LoadUrlMessage] load %s", (LPCTSTR)Url);
- if(m_WebIE != NULL){
- if (m_WebIE->DestroyWindow()) {
- m_pHost->Debug("[OnLoadUrlMessage] OK to destroy window of webbrowser.");
- //删除对象
- delete m_WebIE;
- m_WebIE = NULL;
- }
- else {
- m_pHost->Debug("[OnLoadUrlMessage] Fail to destroy window of webbrowser.");
- //删除对象
- delete m_WebIE;
- m_WebIE = NULL;
- m_pICallBack->LoadCallBack(FALSE);
- return 1;
- }
- }
- m_WebIE = new CExplorer1();
- CRect Rect;
- this->GetClientRect(&Rect);
- if (m_WebIE->Create(NULL, NULL, WS_VISIBLE, Rect, this, IDC_EXPLORER1)) {
- m_pHost->Debug("[OnLoadUrlMessage] OK to create webbrowser.");
- }
- else {
- m_pHost->Debug("[OnLoadUrlMessage] Fail to create webbrowser.");
- m_pICallBack->LoadCallBack(FALSE);
- return 1;
- }
- COleVariant noArg;
- m_WebIE->Navigate((LPCTSTR)Url, &noArg, &noArg, &noArg, &noArg);
- //VARIANT vt;
- //COleVariant varMyURL = _T(Url);
- //m_WebIE->Navigate2(varMyURL, &vt, &vt, &vt, &vt);
- return 0;
- }
- afx_msg LRESULT CWebBrowserDlg::OnPrintMessage(WPARAM wParam, LPARAM lParam)
- {
- //打印 (不提示用户)
- if (bLoadSucc == TRUE && m_WebIE) // 加载成功才能打印
- {
- m_WebIE->ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER,NULL,NULL);
- DWORD bRet = GetLastError();
- if(0 == bRet) {
- m_pICallBack->PrintCallBack(TRUE);
- }
- else {
- m_pHost->Debug("lytest call ExecWB failed(%d).", bRet);
- m_pICallBack->PrintCallBack(FALSE);
- }
- }
- else
- {
- m_pICallBack->PrintCallBack(FALSE);
- }
- bLoadSucc = FALSE;
- return 0;
- }
- void CWebBrowserDlg::OnClose()
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- if (m_WebIE != NULL)
- {
- delete m_WebIE;
- m_WebIE = NULL;
- m_pHost->Debug("lytest WebIE destroyed.");
- }
- CDialogEx::OnClose();
- }
- void CWebBrowserDlg::BeforeNavigate2Explorer1(LPDISPATCH pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers, BOOL* Cancel)
- {
- // TODO: 在此处添加消息处理程序代码
- }
- void CWebBrowserDlg::NavigateComplete2Explorer1(LPDISPATCH pDisp, VARIANT* URL)
- {
- // TODO: 在此处添加消息处理程序代码
- }
|