ScrView.cpp
上传用户:zhenhuadz
上传日期:2007-01-07
资源大小:1511k
文件大小:3k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. // ScrView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "anywhere.h"
  5. #include "ScrView.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CScrView
  13. IMPLEMENT_DYNCREATE(CScrView, CScrollView)
  14. CScrView::CScrView()
  15. {
  16. }
  17. CScrView::~CScrView()
  18. {
  19. }
  20. BEGIN_MESSAGE_MAP(CScrView, CScrollView)
  21. //{{AFX_MSG_MAP(CScrView)
  22. //}}AFX_MSG_MAP
  23. END_MESSAGE_MAP()
  24. /////////////////////////////////////////////////////////////////////////////
  25. // CScrView drawing
  26. void CScrView::OnInitialUpdate()
  27. {
  28. CScrollView::OnInitialUpdate();
  29. ASSERT(GetDocument() != NULL);
  30. SetScrollSizes(MM_TEXT, GetDocument()->GetDocSize());
  31. /*CSize sizeTotal;
  32. // TODO: calculate the total size of this view
  33. sizeTotal.cx = sizeTotal.cy = 100;
  34. SetScrollSizes(MM_TEXT, sizeTotal);
  35. CSize sizeTotal(1000,500);
  36. CSize sizePage(sizeTotal.cx/2,sizeTotal.cy/2);
  37. CSize sizeLine(sizeTotal.cx/4,sizeTotal.cy/4);
  38. SetScrollSizes(MM_TEXT,sizeTotal,sizePage,sizeLine);
  39. */
  40. }
  41. void CScrView::OnDraw(CDC* pDC)
  42. {
  43. CAnywhereDoc* pDoc = GetDocument();
  44. //CDibDoc* pDoc = GetDocument();
  45. HDIB hDIB = pDoc->GetHDIB();
  46. if (hDIB != NULL)
  47. {
  48. LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
  49. int cxDIB = (int) ::DIBWidth(lpDIB);         // Size of DIB - x
  50. int cyDIB = (int) ::DIBHeight(lpDIB);        // Size of DIB - y
  51. ::GlobalUnlock((HGLOBAL) hDIB);
  52. CRect rcDIB;
  53. rcDIB.top = rcDIB.left = 0;
  54. rcDIB.right = cxDIB;
  55. rcDIB.bottom = cyDIB;
  56. CRect rcDest;
  57. if (pDC->IsPrinting())   // printer DC
  58. {
  59. // get size of printer page (in pixels)
  60. int cxPage = pDC->GetDeviceCaps(HORZRES);
  61. int cyPage = pDC->GetDeviceCaps(VERTRES);
  62. // get printer pixels per inch
  63. int cxInch = pDC->GetDeviceCaps(LOGPIXELSX);
  64. int cyInch = pDC->GetDeviceCaps(LOGPIXELSY);
  65. //
  66. // Best Fit case -- create a rectangle which preserves
  67. // the DIB's aspect ratio, and fills the page horizontally.
  68. //
  69. // The formula in the "->bottom" field below calculates the Y
  70. // position of the printed bitmap, based on the size of the
  71. // bitmap, the width of the page, and the relative size of
  72. // a printed pixel (cyInch / cxInch).
  73. //
  74. rcDest.top = rcDest.left = 0;
  75. rcDest.bottom = (int)(((double)cyDIB * cxPage * cyInch)
  76. / ((double)cxDIB * cxInch));
  77. rcDest.right = cxPage;
  78. }
  79. else   // not printer DC
  80. {
  81. rcDest = rcDIB;
  82. }
  83. ::PaintDIB(pDC->m_hDC, &rcDest, pDoc->GetHDIB(),
  84. &rcDIB, pDoc->GetDocPalette());
  85. }
  86. // TODO: add draw code here
  87. }
  88. /////////////////////////////////////////////////////////////////////////////
  89. // CScrView diagnostics
  90. #ifdef _DEBUG
  91. void CScrView::AssertValid() const
  92. {
  93. CScrollView::AssertValid();
  94. }
  95. void CScrView::Dump(CDumpContext& dc) const
  96. {
  97. CScrollView::Dump(dc);
  98. }
  99. #endif //_DEBUG
  100. /////////////////////////////////////////////////////////////////////////////
  101. // CScrView message handlers
  102. void CScrView::message(CString filename)
  103. GetDocument()->ReadBmp(filename);
  104. SetScrollSizes(MM_TEXT, GetDocument()->GetDocSize());
  105.     Invalidate();//显示图片
  106. }