libwebbrowser.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #include "stdafx.h"
  2. #include "libwebbrowser.h"
  3. #include "CWebBrowserDlg.h"
  4. // ´íÎóö¾Ù
  5. enum ErrorCodeEnum
  6. {
  7. Error_Succeed = 0,
  8. Error_ThreadTimeOut,
  9. Error_Param,
  10. Error_Unexpect
  11. };
  12. class libwebbrowser_impl
  13. {
  14. public:
  15. libwebbrowser_impl(CPrintHostApi *pHostApi, IWebPrintCallBack *pICallBack):
  16. m_pDlg(NULL), m_pHostApi(NULL), m_pICallBack(NULL)
  17. {
  18. m_pHostApi = pHostApi;
  19. m_pICallBack = pICallBack;
  20. // Æô¶¯WebBrowser¶Ô»°¿ò
  21. ErrorCodeEnum Error = CreateWBDialog();
  22. if (Error == Error_Succeed)
  23. {
  24. m_pHostApi->Debug("Succeed to create WebBrowserDlg!");
  25. }
  26. else if (Error == Error_ThreadTimeOut)
  27. {
  28. m_pHostApi->Debug("Fail to create WebBrowserDlg: Error_ThreadTimeOut!");
  29. }
  30. else if (Error == Error_Unexpect)
  31. {
  32. m_pHostApi->Debug("Fail to create WebBrowserDlg: Error_Unexpect!");
  33. }
  34. }
  35. ~libwebbrowser_impl()
  36. {
  37. m_pHostApi = NULL;
  38. m_pICallBack = NULL;
  39. }
  40. BOOL LoadPage(const char* szURL)
  41. {
  42. m_pHostApi->Debug("[Web Print] load %s", szURL);
  43. LRESULT ret = ::SendMessage(m_pDlg->GetSafeHwnd(), WM_LOADURLMESSAGE, NULL, (LPARAM)szURL);
  44. return TRUE;
  45. }
  46. BOOL PrintPage()
  47. {
  48. //LRESULT ret = ::SendMessage(m_pDlg->GetSafeHwnd(), WM_PRINTMESSAGE, NULL, NULL);
  49. //return TRUE;
  50. return ::PostMessage(m_pDlg->GetSafeHwnd(), WM_PRINTMESSAGE, NULL, NULL);
  51. }
  52. BOOL Exit()
  53. {
  54. if (m_pDlg && m_hThread)
  55. {
  56. ::PostMessage(m_pDlg->GetSafeHwnd(), WM_CLOSE, NULL, NULL);
  57. WaitForSingleObject(m_hThread, INFINITE);
  58. CloseHandle(m_hThread); m_hThread = NULL;
  59. m_pHostApi->Debug("lytest WebBrowserDlg closed.");
  60. }
  61. return TRUE;
  62. }
  63. void BrowserDlg()
  64. {
  65. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  66. m_pDlg = new CWebBrowserDlg(m_pHostApi, m_pICallBack);
  67. m_pDlg->DoModal();
  68. delete m_pDlg; m_pDlg = NULL;
  69. m_pHostApi->Debug("lytest WebBrowserDlg destroyed.");
  70. }
  71. static UINT WINAPI BrowserThreadProc(LPVOID param)
  72. {
  73. CoInitialize(NULL);
  74. libwebbrowser_impl *p = (libwebbrowser_impl*)param;
  75. p->BrowserDlg();
  76. CoUninitialize();
  77. return 0;
  78. }
  79. private:
  80. ErrorCodeEnum CreateWBDialog()
  81. {
  82. DWORD WaitInterval = 3000;
  83. h_WBCreateEvent = CreateEvent(NULL, FALSE, FALSE, _T("WBCreateEvent"));
  84. m_hThread = (HANDLE)_beginthreadex(NULL, 0, BrowserThreadProc, this, 0, &m_threadID);
  85. DWORD ret = WaitForSingleObject(h_WBCreateEvent, WaitInterval);
  86. CloseHandle(h_WBCreateEvent);
  87. h_WBCreateEvent = NULL;
  88. if (ret == WAIT_OBJECT_0) {
  89. return Error_Succeed;
  90. }
  91. else if (ret == WAIT_TIMEOUT) {
  92. return Error_ThreadTimeOut;
  93. }
  94. else if (ret == WAIT_FAILED)
  95. {
  96. return Error_Unexpect;
  97. }
  98. }
  99. private:
  100. CWebBrowserDlg *m_pDlg;
  101. CPrintHostApi *m_pHostApi;
  102. IWebPrintCallBack *m_pICallBack;
  103. // add by ly
  104. HANDLE m_hThread;
  105. UINT m_threadID;
  106. HANDLE h_WBCreateEvent;
  107. };
  108. Clibwebbrowser::Clibwebbrowser(CPrintHostApi *pHostApi, IWebPrintCallBack *pICallBack)
  109. {
  110. m_pImpl = new libwebbrowser_impl(pHostApi, pICallBack);
  111. }
  112. Clibwebbrowser::~Clibwebbrowser()
  113. {
  114. if (m_pImpl != NULL)
  115. {
  116. delete m_pImpl;
  117. m_pImpl = NULL;
  118. }
  119. }
  120. BOOL Clibwebbrowser::LoadPage(const char* szURL)
  121. {
  122. return m_pImpl->LoadPage(szURL);
  123. }
  124. BOOL Clibwebbrowser::PrintPage()
  125. {
  126. return m_pImpl->PrintPage();
  127. }
  128. BOOL Clibwebbrowser::Exit()
  129. {
  130. return m_pImpl->Exit();
  131. }