123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- #include "stdafx.h"
- #include "libwebbrowser.h"
- #include "CWebBrowserDlg.h"
- // ´íÎóö¾Ù
- enum ErrorCodeEnum
- {
- Error_Succeed = 0,
- Error_ThreadTimeOut,
- Error_Param,
- Error_Unexpect
- };
- class libwebbrowser_impl
- {
- public:
- libwebbrowser_impl(CPrintHostApi *pHostApi, IWebPrintCallBack *pICallBack):
- m_pDlg(NULL), m_pHostApi(NULL), m_pICallBack(NULL)
- {
- m_pHostApi = pHostApi;
- m_pICallBack = pICallBack;
- // Æô¶¯WebBrowser¶Ô»°¿ò
- ErrorCodeEnum Error = CreateWBDialog();
- if (Error == Error_Succeed)
- {
- m_pHostApi->Debug("Succeed to create WebBrowserDlg!");
- }
- else if (Error == Error_ThreadTimeOut)
- {
- m_pHostApi->Debug("Fail to create WebBrowserDlg: Error_ThreadTimeOut!");
- }
- else if (Error == Error_Unexpect)
- {
- m_pHostApi->Debug("Fail to create WebBrowserDlg: Error_Unexpect!");
- }
- }
- ~libwebbrowser_impl()
- {
- m_pHostApi = NULL;
- m_pICallBack = NULL;
- }
- BOOL LoadPage(const char* szURL)
- {
- m_pHostApi->Debug("[Web Print] load %s", szURL);
- LRESULT ret = ::SendMessage(m_pDlg->GetSafeHwnd(), WM_LOADURLMESSAGE, NULL, (LPARAM)szURL);
- return TRUE;
- }
- BOOL PrintPage()
- {
- //LRESULT ret = ::SendMessage(m_pDlg->GetSafeHwnd(), WM_PRINTMESSAGE, NULL, NULL);
- //return TRUE;
- return ::PostMessage(m_pDlg->GetSafeHwnd(), WM_PRINTMESSAGE, NULL, NULL);
- }
- BOOL Exit()
- {
- if (m_pDlg && m_hThread)
- {
- ::PostMessage(m_pDlg->GetSafeHwnd(), WM_CLOSE, NULL, NULL);
- WaitForSingleObject(m_hThread, INFINITE);
- CloseHandle(m_hThread); m_hThread = NULL;
- m_pHostApi->Debug("lytest WebBrowserDlg closed.");
- }
- return TRUE;
- }
- void BrowserDlg()
- {
- AFX_MANAGE_STATE(AfxGetStaticModuleState());
- m_pDlg = new CWebBrowserDlg(m_pHostApi, m_pICallBack);
- m_pDlg->DoModal();
- delete m_pDlg; m_pDlg = NULL;
- m_pHostApi->Debug("lytest WebBrowserDlg destroyed.");
- }
- static UINT WINAPI BrowserThreadProc(LPVOID param)
- {
- CoInitialize(NULL);
- libwebbrowser_impl *p = (libwebbrowser_impl*)param;
- p->BrowserDlg();
- CoUninitialize();
- return 0;
- }
- private:
- ErrorCodeEnum CreateWBDialog()
- {
- DWORD WaitInterval = 3000;
- h_WBCreateEvent = CreateEvent(NULL, FALSE, FALSE, _T("WBCreateEvent"));
- m_hThread = (HANDLE)_beginthreadex(NULL, 0, BrowserThreadProc, this, 0, &m_threadID);
- DWORD ret = WaitForSingleObject(h_WBCreateEvent, WaitInterval);
- CloseHandle(h_WBCreateEvent);
- h_WBCreateEvent = NULL;
- if (ret == WAIT_OBJECT_0) {
- return Error_Succeed;
- }
- else if (ret == WAIT_TIMEOUT) {
- return Error_ThreadTimeOut;
- }
- else if (ret == WAIT_FAILED)
- {
- return Error_Unexpect;
- }
- }
- private:
- CWebBrowserDlg *m_pDlg;
- CPrintHostApi *m_pHostApi;
- IWebPrintCallBack *m_pICallBack;
- // add by ly
- HANDLE m_hThread;
- UINT m_threadID;
- HANDLE h_WBCreateEvent;
- };
- Clibwebbrowser::Clibwebbrowser(CPrintHostApi *pHostApi, IWebPrintCallBack *pICallBack)
- {
- m_pImpl = new libwebbrowser_impl(pHostApi, pICallBack);
- }
- Clibwebbrowser::~Clibwebbrowser()
- {
- if (m_pImpl != NULL)
- {
- delete m_pImpl;
- m_pImpl = NULL;
- }
- }
- BOOL Clibwebbrowser::LoadPage(const char* szURL)
- {
- return m_pImpl->LoadPage(szURL);
- }
- BOOL Clibwebbrowser::PrintPage()
- {
- return m_pImpl->PrintPage();
- }
- BOOL Clibwebbrowser::Exit()
- {
- return m_pImpl->Exit();
- }
|