HtmlCtrl.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:3k
源码类别:

图形图象

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////
  2. // Microsoft Systems Journal -- December 1999
  3. // If this code works, it was written by Paul DiLascia.
  4. // If not, I don't know who wrote it.
  5. // Compiles with Visual C++ 6.0, runs on Windows 98 and probably NT too.
  6. //
  7. #include "StdAfx.h"
  8. #include "HtmlCtrl.h"
  9. #include "UIMessages.h"
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. IMPLEMENT_DYNAMIC(CHtmlCtrl, CUIHtmlView)
  16. BEGIN_MESSAGE_MAP(CHtmlCtrl, CUIHtmlView)
  17. ON_WM_DESTROY()
  18. ON_WM_MOUSEACTIVATE()
  19. ON_MESSAGE(WM_APP_CB_IE_SEL_CHANGE,OnAppCbIeSelChange)
  20. END_MESSAGE_MAP()
  21. BOOL CHtmlCtrl::PreCreateWindow(CREATESTRUCT& cs) 
  22. {
  23. // TODO: Add your specialized code here and/or call the base class
  24. cs.lpszClass = AfxRegisterWndClass(
  25.   CS_DBLCLKS,                       
  26.   NULL,                             
  27.   NULL,                             
  28.   NULL); 
  29. ASSERT(cs.lpszClass);
  30. BOOL bRet = CHtmlView::PreCreateWindow(cs);
  31. return bRet;
  32. }
  33. //////////////////
  34. // Create control in same position as an existing static control with
  35. // the same ID (could be any kind of control, really)
  36. //
  37. BOOL CHtmlCtrl::CreateFromStatic(UINT nID, CWnd* pParent)
  38. {
  39. CStatic wndStatic;
  40. if (!wndStatic.SubclassDlgItem(nID, pParent))
  41. return FALSE;
  42. // Get static control rect, convert to parent's client coords.
  43. CRect rc;
  44. wndStatic.GetWindowRect(&rc);
  45. pParent->ScreenToClient(&rc);
  46. wndStatic.DestroyWindow();
  47. // create HTML control (CHtmlView)
  48. return Create(NULL,  // class name
  49. NULL,  // title
  50. (WS_CHILD | WS_VISIBLE ),  // style
  51. rc,  // rectangle
  52. pParent,  // parent
  53. nID,  // control ID
  54. NULL);  // frame/doc context not used
  55. }
  56. ////////////////
  57. // Override to avoid CView stuff that assumes a frame.
  58. //
  59. void CHtmlCtrl::OnDestroy()
  60. {
  61. // This is probably unecessary since ~CHtmlView does it, but
  62. // safer to mimic CHtmlView::OnDestroy.
  63. if (m_pBrowserApp) {
  64. m_pBrowserApp->Release();
  65. m_pBrowserApp = NULL;
  66. }
  67. CWnd::OnDestroy(); // bypass CView doc/frame stuff
  68. }
  69. ////////////////
  70. // Override to avoid CView stuff that assumes a frame.
  71. //
  72. int CHtmlCtrl::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT msg)
  73. {
  74. // bypass CView doc/frame stuff
  75. return CWnd::OnMouseActivate(pDesktopWnd, nHitTest, msg);
  76. }
  77. //////////////////
  78. // Override navigation handler to pass to "app:" links to virtual handler.
  79. // Cancels the navigation in the browser, since app: is a pseudo-protocol.
  80. //
  81. void CHtmlCtrl::OnBeforeNavigate2( LPCTSTR lpszURL,
  82. DWORD nFlags,
  83. LPCTSTR lpszTargetFrameName,
  84. CByteArray& baPostedData,
  85. LPCTSTR lpszHeaders,
  86. BOOL* pbCancel )
  87. {
  88. CUIHtmlView::OnBeforeNavigate2(lpszURL,nFlags,lpszTargetFrameName,baPostedData,lpszHeaders,pbCancel);
  89. LPCTSTR APP_PROTOCOL = _T("app:");
  90. int len = _tcslen(APP_PROTOCOL);
  91. if (_tcsnicmp(lpszURL, APP_PROTOCOL, len)==0) {
  92. OnAppCmd(lpszURL + len);
  93. *pbCancel = TRUE;
  94. }
  95. }
  96. //////////////////
  97. // Called when the browser attempts to navigate to "app:foo"
  98. // with "foo" as lpszWhere. Override to handle app commands.
  99. //
  100. void CHtmlCtrl::OnAppCmd(LPCTSTR lpszWhere)
  101. {
  102. // default: do nothing
  103. }
  104. LRESULT CHtmlCtrl::OnAppCbIeSelChange(WPARAM wParam, LPARAM lParam)
  105. {
  106. if (wParam)
  107. Navigate((LPCTSTR)wParam);
  108. return 1;
  109. }