Overlay.cpp
上传用户:hxb_1234
上传日期:2010-03-30
资源大小:8328k
文件大小:4k
源码类别:

VC书籍

开发平台:

Visual C++

  1. // Overlay.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include <windows.h>
  5. #include <mmsystem.h>
  6. #include "MAV8.h"
  7. #include "Overlay.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // COverlay
  15. IMPLEMENT_DYNCREATE(COverlay, CFrameWnd)
  16. COverlay::COverlay()
  17. {
  18. // g_hVFDrv = hVFDrv;
  19. CFrameWnd::Create(NULL, "Overlay Window");
  20. }
  21. COverlay::COverlay(HDRVR hVFDrv, RECT rectOverlay, WORD wSrcWidth, WORD wSrcHeight)
  22. {
  23. g_hVFDrv = hVFDrv;
  24. wOverlaySrcWidth=wSrcWidth;
  25.     wOverlaySrcHeight=wSrcHeight;
  26. CFrameWnd::Create(NULL, "Video Window",WS_OVERLAPPEDWINDOW, rectOverlay);
  27. }
  28. COverlay::~COverlay()
  29. {
  30. }
  31. BEGIN_MESSAGE_MAP(COverlay, CFrameWnd)
  32. //{{AFX_MSG_MAP(COverlay)
  33. ON_WM_CREATE()
  34. ON_WM_MOVE()
  35. ON_WM_SIZE()
  36. ON_WM_CLOSE()
  37. ON_WM_PAINT()
  38. //}}AFX_MSG_MAP
  39. END_MESSAGE_MAP()
  40. BOOL COverlay::SetSrc(WORD wSrcWidth, WORD wSrcHeight)
  41. {
  42. wOverlaySrcWidth=wSrcWidth;
  43. wOverlaySrcHeight=wSrcHeight;
  44. HVFSetOverlaySrc(g_hVFDrv, wOverlaySrcWidth, wOverlaySrcHeight);
  45. CRect rectOverlay;
  46. GetWindowRect(rectOverlay);
  47. SetWindowPos(&wndTop, rectOverlay.left, rectOverlay.top, 
  48. wSrcWidth + GetSystemMetrics(SM_CXFRAME),
  49. wSrcHeight + GetSystemMetrics(SM_CYFRAME)+12+
  50. //GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYMENU), 
  51. GetSystemMetrics(SM_CYCAPTION), 
  52. SWP_SHOWWINDOW);
  53. return TRUE;
  54. }
  55. /////////////////////////////////////////////////////////////////////////////
  56. // COverlay message handlers
  57. BOOL COverlay::PreCreateWindow(CREATESTRUCT& cs) 
  58. {
  59. /*// TODO: Add your specialized code here and/or call the base class
  60. HBRUSH hBrushMagenta=::CreateSolidBrush(RGB(255, 0, 255));
  61. HCURSOR hCursor=::LoadCursor(NULL, IDC_ARROW);
  62. //*** jsm, 1/9/98
  63. // added LoadIcon
  64. HICON hIcon = ::LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_TSTLOGO));
  65. cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
  66. hCursor, hBrushMagenta, hIcon);
  67. DeleteObject(hBrushMagenta);
  68. */
  69. nScreenX=GetSystemMetrics(SM_CXSCREEN);
  70. nScreenY=GetSystemMetrics(SM_CYSCREEN);
  71. return CFrameWnd::PreCreateWindow(cs);
  72. }
  73. int COverlay::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  74. {
  75. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  76. return -1;
  77. // TODO: Add your specialized creation code here
  78. HVFSetOverlayWnd(g_hVFDrv, m_hWnd);
  79. HVFSetOverlaySrc(g_hVFDrv, wOverlaySrcWidth, wOverlaySrcHeight);
  80. return 0;
  81. }
  82. void COverlay::OnMove(int x, int y) 
  83. {
  84. gnPosX=x;
  85. gnPosY=y;
  86. CFrameWnd::OnMove(x, y);
  87. // TODO: Add your message handler code here
  88.     HVFSetOverlayPos(g_hVFDrv, x, y);
  89. }
  90. void COverlay::OnSize(UINT nType, int cx, int cy) 
  91. {
  92. #define DIVIDEVALUE 40
  93. // TODO: Add your message handler code here
  94. if(cx+(cx/DIVIDEVALUE) > nScreenX || 
  95.    cy+(cy/DIVIDEVALUE) > nScreenY){
  96.   // make the window size smaller to avoid the 352 and 360 problem
  97. CRect rectOverlay;
  98. rectOverlay.left=0;
  99. rectOverlay.top=0;
  100. rectOverlay.right= nScreenX - (nScreenX/DIVIDEVALUE) ;
  101. rectOverlay.bottom= nScreenY- (nScreenY/DIVIDEVALUE) ;
  102. SetWindowPos(&wndTop, rectOverlay.left, rectOverlay.top, 
  103. rectOverlay.right, rectOverlay.bottom+12, SWP_SHOWWINDOW);
  104. } else {
  105. // make the destination lager than window size, because 360 and 352 problem
  106. CFrameWnd::OnSize(nType, cx, cy);
  107. // SetOverlayDst(m_hWnd, cx+(cx/DIVIDEVALUE), cy+(cy/DIVIDEVALUE));
  108. HVFSetOverlayDst(g_hVFDrv, cx+(cx/DIVIDEVALUE), cy);
  109. }
  110. HVFSetOverlayPos(g_hVFDrv, gnPosX, gnPosY);
  111. }
  112. void COverlay::OnClose() 
  113. {
  114. HVFUnloadOverlay (g_hVFDrv);
  115. CFrameWnd::OnClose();
  116. }
  117. void COverlay::OnPaint() 
  118. {
  119. CPaintDC dc(this); // device context for painting
  120. if (g_hVFDrv)
  121. HVFPaintOverlay (g_hVFDrv, &dc.m_ps);
  122. }