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;iMoveTo(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); 
	 
}