FullScreenHandler.cpp
上传用户:lj3531212
上传日期:2007-06-18
资源大小:346k
文件大小:2k
源码类别:

绘图程序

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////
  2. // MSDN Magazine -- December 2002
  3. // If this code works, it was written by Paul DiLascia.
  4. // If not, I don't know who wrote it.
  5. // Compiles with VC 6.0 or VS.NET on Windows XP. Tab size=3.
  6. //
  7. #include "StdAfx.h"
  8. #include "FullScreenHandler.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. // redfine this to nop if you don't want tracing
  15. #define FSTRACE TRACE
  16. // Global object handles full-screen mode
  17. CFullScreenHandler FullScreenHandler;
  18. CFullScreenHandler::CFullScreenHandler()
  19. {
  20. m_rcRestore.SetRectEmpty();
  21. }
  22. CFullScreenHandler::~CFullScreenHandler()
  23. {
  24. }
  25. //////////////////
  26. // Resize frame so view's client area fills the entire screen. Use
  27. // GetSystemMetrics to get the screen size -- the rest is pixel
  28. // arithmetic.
  29. //
  30. void CFullScreenHandler::Maximize(CFrameWnd* pFrame, CWnd* pView)
  31. {
  32. // get view rectangle
  33. if (pView) {
  34. CRect rcv;
  35. pView->GetWindowRect(&rcv);
  36. // get frame rectangle
  37. pFrame->GetWindowRect(m_rcRestore); // save for restore
  38. const CRect& rcf = m_rcRestore; // frame rect
  39. FSTRACE("Frame=(%d,%d) x (%d,%d)n",
  40. rcf.left, rcf.top, rcf.Width(), rcf.Height());
  41. FSTRACE("View =(%d,%d) x (%d,%d)n",
  42. rcv.left, rcv.top, rcv.Width(), rcv.Height());
  43. // now compute new rect
  44. CRect rc(0,0, GetSystemMetrics(SM_CXSCREEN),
  45. GetSystemMetrics(SM_CYSCREEN));
  46. FSTRACE("Scrn =(%d,%d) x (%d,%d)n",
  47. rc.left, rc.top, rc.Width(), rc.Height());
  48. rc.left  += rcf.left  - rcv.left;
  49. rc.top   += rcf.top   - rcv.top;
  50. rc.right += rcf.right - rcv.right;
  51. rc.bottom+= rcf.bottom- rcv.bottom;
  52. FSTRACE("New  =(%d,%d) x (%d,%d)n",
  53. rc.left, rc.top, rc.Width(), rc.Height());
  54. // move frame!
  55. pFrame->SetWindowPos(NULL, rc.left, rc.top,
  56. rc.Width(), rc.Height(), SWP_NOZORDER);
  57. }
  58. }
  59. void CFullScreenHandler::Restore(CFrameWnd* pFrame)
  60. {
  61. const CRect& rc = m_rcRestore;
  62. pFrame->SetWindowPos(NULL, rc.left, rc.top,
  63. rc.Width(), rc.Height(), SWP_NOZORDER);
  64. m_rcRestore.SetRectEmpty();
  65. }
  66. CSize CFullScreenHandler::GetMaxSize()
  67. {
  68. CRect rc(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));
  69. rc.InflateRect(41,50);
  70. return rc.Size();
  71. }