www.pudn.com > vcframe.rar > RightView.cpp
// RightView.cpp : implementation file // #include "stdafx.h" #include "match.h" #include "mainfrm.h" #include "RightView.h" #include "matchDoc.h" #include "DIBAPI.h" #include#include #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CRightView IMPLEMENT_DYNCREATE(CRightView, CScrollView) CRightView::CRightView() { hDib=NULL; flag=false; } CRightView::~CRightView() { } BEGIN_MESSAGE_MAP(CRightView, CScrollView) //{{AFX_MSG_MAP(CRightView) ON_WM_MOUSEWHEEL() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CRightView drawing void CRightView::OnInitialUpdate() { CScrollView::OnInitialUpdate(); CSize sizeTotal; // TODO: calculate the total size of this view sizeTotal.cx =4500; sizeTotal.cy = 4580; SetScrollSizes(MM_TEXT, sizeTotal); } void CRightView::OnDraw(CDC* pDC) { // 显示等待光标 BeginWaitCursor(); // 获取文档 CMatchDoc* pDoc = GetDocument(); // ASSERT_VALID(pDoc); // TODO: add draw code for native data here // 获取DIB // HDIB hDIB = pDoc->hDibR; // 判断DIB是否为空 if (hDib != NULL) { LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDib); // 获取DIB宽度 int cxDIB = (int) ::DIBWidth(lpDIB); // 获取DIB高度 int cyDIB = (int) ::DIBHeight(lpDIB); ::GlobalUnlock((HGLOBAL) hDib); CSize sizeTotal(::DIBWidth(lpDIB), ::DIBHeight(lpDIB)); SetScrollSizes(MM_TEXT, sizeTotal); CRect rcDIB; rcDIB.top = rcDIB.left = 0; rcDIB.right = cxDIB; rcDIB.bottom = cyDIB; CRect rcDest; rcDest = rcDIB; // 输出DIB ::PaintDIB(pDC->m_hDC, &rcDest, hDib, &rcDIB, pDoc->GetDocPalette()); } CPen redPen; redPen.CreatePen(PS_SOLID,1,RGB(255,0,0)); CPen* pOldPen; pOldPen=pDC->SelectObject(&redPen); CPoint point; if(flag) { for(int i=0;i MoveTo(point.x-10,point.y); pDC->LineTo(point.x+10,point.y); pDC->MoveTo(point.x,point.y-10); pDC->LineTo(point.x,point.y+10); } } // 恢复正常光标 EndWaitCursor(); } ///////////////////////////////////////////////////////////////////////////// // CRightView diagnostics #ifdef _DEBUG void CRightView::AssertValid() const { CScrollView::AssertValid(); } void CRightView::Dump(CDumpContext& dc) const { CScrollView::Dump(dc); } CMatchDoc* CRightView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMatchDoc))); return (CMatchDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CRightView message handlers BOOL CRightView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { // TODO: Add your message handler code here and/or call default CPoint point = GetDeviceScrollPosition(); point.y = point.y - zDelta; ScrollToPosition(point); //Invalidate(FALSE); return CScrollView::OnMouseWheel(nFlags, zDelta, pt); }