www.pudn.com > gis_graphic_item_lib.rar > lmlView.cpp


// lmlView.cpp : implementation of the CLmlView class 
// 
 
#include "stdafx.h" 
#include "lml.h" 
 
#include "lmlDoc.h" 
#include "lmlView.h" 
 
#include "bmpproc.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CLmlView 
 
IMPLEMENT_DYNCREATE(CLmlView, CView) 
 
BEGIN_MESSAGE_MAP(CLmlView, CView) 
	//{{AFX_MSG_MAP(CLmlView) 
	ON_COMMAND(ID_BMPPROC, OnBmpproc) 
	ON_COMMAND(ID_EXTLOG, OnExtlog) 
	ON_COMMAND(ID_SYMBBO, OnSymbbo) 
	//}}AFX_MSG_MAP 
	// Standard printing commands 
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CLmlView construction/destruction 
 
CLmlView::CLmlView() 
{ 
	// TODO: add construction code here 
 
} 
 
CLmlView::~CLmlView() 
{ 
} 
 
BOOL CLmlView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CLmlView drawing 
 
void CLmlView::OnDraw(CDC* pDC) 
{ 
	CLmlDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	// TODO: add draw code for native data here 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CLmlView printing 
 
BOOL CLmlView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
	// default preparation 
	return DoPreparePrinting(pInfo); 
} 
 
void CLmlView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add extra initialization before printing 
} 
 
void CLmlView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add cleanup after printing 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CLmlView diagnostics 
 
#ifdef _DEBUG 
void CLmlView::AssertValid() const 
{ 
	CView::AssertValid(); 
} 
 
void CLmlView::Dump(CDumpContext& dc) const 
{ 
	CView::Dump(dc); 
} 
 
CLmlDoc* CLmlView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLmlDoc))); 
	return (CLmlDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CLmlView message handlers 
void CLmlView::OnBmpproc()  
{ 
	CClientDC	dc(this); 
	int i,x,y; 
	CBrush brush; 
	for(i=1;i<81;i++) 
	{ 
		x=((i-1)%10)*70; 
		y=((i-1)/10)*50; 
		SetMifBrush(i,RGB(255,0,0),RGB(255,255,255),&brush); 
		dc.SelectObject(&brush); 
		dc.Rectangle(x,y,x+70,y+50); 
		brush.DeleteObject(); 
	} 
} 
 
void CLmlView::SetMifBrush(int nStyle, COLORREF crFore, COLORREF crBk,CBrush* brush) 
{ 
	int nBrush=nStyle; 
//	int nBrush=7; 
//	COLORREF crFore=RGB(255,0,0); 
//	COLORREF crBk=RGB(255,255,255); 
 
	//获得画笔图象 
	CPoint ptBrush; 
	int n=(nBrush-1)*8; 
	ptBrush.x=n%80; 
	ptBrush.y=(n/80)*8; 
 
	CClientDC dc(this); 
	CBitmap	pBmp; 
	CBmpProc bmp1; 
	CRect rectDest=CRect(0,0,8,8); 
	CRect rectSrc=CRect(ptBrush.x,ptBrush.y,ptBrush.x+8,ptBrush.y+8); 
 
	pBmp.LoadBitmap(IDB_MIF_BRUSH); 
	bmp1.Create(8,8,24,NULL); 
	bmp1.CopyFromHbmp((HBITMAP)pBmp.GetSafeHandle(),&rectDest,&rectSrc); 
 
 
	//设置画笔颜色 
	//1,2中的全色当作前景颜色 
	switch(nBrush) 
	{ 
	case 1: 
		//不能修改默认的颜色 
		if(RGB(0,0,0)!=crFore) 
			bmp1.ReSetColor(RGB(255,255,255),crFore); 
		break; 
	case 2: 
		if(RGB(0,0,0)!=crFore) 
			bmp1.ReSetColor(RGB(0,0,0),crFore); 
		break; 
	default: 
		//变换其他的可以直接使用,但是黑白相反必须有一个中间过程 
		if((crFore==RGB(255,255,255))&&(crBk==RGB(0,0,0))) 
		{ 
			bmp1.ReSetColor(RGB(0,0,0),RGB(0,255,255)); 
			bmp1.ReSetColor(RGB(255,255,255),RGB(0,0,0)); 
			bmp1.ReSetColor(RGB(0,255,255),RGB(255,255,255)); 
		} 
		else 
		{ 
			//前景黑色不用处理 
			if(crFore!=RGB(0,0,0)) 
			{ 
				bmp1.ReSetColor(RGB(0,0,0),crFore); 
			} 
			//背景白色不用处理 
			if(crBk!=RGB(255,255,255)) 
			{ 
				bmp1.ReSetColor(RGB(255,255,255),crBk); 
			} 
		} 
		break; 
	} 
 
	//创建画笔资源 
	HBITMAP	hBmp; 
	hBmp=bmp1.Detach(); 
 
	if(hBmp==NULL) 
		AfxMessageBox("handle null!"); 
 
	CBitmap ppBmp; 
	ppBmp.Attach(hBmp); 
 
	//CBrush brush(&ppBmp); 
	brush->CreatePatternBrush(&ppBmp); 
 
//	dc.SelectObject(&brush); 
//	dc.Rectangle(100,100,170,150); 
	 
} 
 
void CLmlView::OnExtlog()  
{ 
	CClientDC dc(this); 
 
	dc.Arc(CRect(120,120,400,400),CPoint(400,120),CPoint(400,400)); 
	dc.MoveTo(150,100); 
	dc.LineTo(450,100); 
	dc.Rectangle(500,100,600,400); 
	dc.EndPath(); 
 
	CPen pen; 
	SetMifPen(26,10,RGB(255,0,0),&pen); 
	dc.SelectObject(&pen); 
 
	dc.BeginPath(); 
	dc.Arc(CRect(120,120,400,400),CPoint(400,120),CPoint(400,400)); 
	dc.MoveTo(150,100); 
	dc.LineTo(450,100); 
	dc.Rectangle(500,100,600,400); 
	dc.EndPath(); 
	dc.StrokePath(); 
} 
 
void CLmlView::OnSymbbo()  
{ 
	CClientDC	dc(this); 
 
	CPoint pt(0,100); 
	int x,n=30; 
	for(x=10;x<810;x+=20) 
	{ 
		pt.x=x; 
		n=(x-10)/20+30; 
		SetSymbols(&dc,pt,n,RGB(0,0,255),20); 
	} 
} 
 
void CLmlView::SetSymbols(CDC *pDC, CPoint point, int nShape, COLORREF crColor, int nSize) 
{ 
	LOGFONT logFont={-13,0,0,0,400,0,0,0,2,3,2,1,18}; 
	logFont.lfHeight=-nSize; 
	strcpy(logFont.lfFaceName,"MapInfo Symbols"); 
 
	pDC->SetTextColor(crColor); 
	CFont font1; 
	font1.CreateFontIndirect(&logFont); 
	CFont *oldFont=pDC->SelectObject(&font1); 
 
	char szSymbol[40]={ 
		'0','1','!','\"','#','$','%','&','\'','(',//30-39 
		')','*','+',',','-','.','/','0','1','2',//40-49 
		'3','4','5','6','7','8','9',';',':','<',//50-59 
		'=','>','?','@','A','B','C','D','8','9',//60-69 
		}; 
 
	if((nShape<31)||(nShape>67)) 
		nShape=32; 
 
	nShape-=30; 
 
	CString sSymbol=szSymbol[nShape]; 
	pDC->TextOut(point.x,point.y,sSymbol,1); 
 
	pDC->SelectObject(oldFont); 
} 
 
 
void CLmlView::SetMifPen(int nStyle,int nWidth, COLORREF crColor,CPen *pen) 
{ 
	LOGBRUSH lb; 
	lb.lbStyle = BS_SOLID;  
	lb.lbColor = crColor;      
	int rn=2; 
	//1-25使用固定宽度1 
	switch(nStyle) 
	{ 
	case 1: 
		pen->CreateStockObject(NULL_PEN); 
		break; 
	case 2: 
		pen->CreatePen(PS_SOLID,1,crColor); 
		break; 
	case 3: 
		{ 
			DWORD r[]={1,1}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 4: 
		{ 
			DWORD r[]={2,2}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 5: 
		{ 
			DWORD r[]={4,2}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 6: 
		{ 
			DWORD r[]={8,2}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 7: 
		{ 
			DWORD r[]={12,2}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 8: 
		{ 
			DWORD r[]={16,4}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 9: 
		{ 
			DWORD r[]={4,4}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 10: 
		{ 
			DWORD r[]={1,4}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 11: 
		{ 
			DWORD r[]={2,4}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 12: 
		{ 
			DWORD r[]={4,4}; 
			int rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 13: 
		{ 
			DWORD r[]={8,8}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 14: 
		{ 
			DWORD r[]={6,4,1,4}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 15: 
		{ 
			DWORD r[]={10,4,1,4}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 16: 
		{ 
			DWORD r[]={10,4,2,4}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 17: 
		{ 
			DWORD r[]={16,8,4,8}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 18: 
		{ 
			DWORD r[]={16,4,2,4,2,4}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 19: 
		{ 
			DWORD r[]={16,4,2,4,2,4,2,4}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 20: 
		{ 
			DWORD r[]={6,2,1,2,1,2}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 21: 
		{ 
			DWORD r[]={12,2,1,2,1,2}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 22: 
		{ 
			DWORD r[]={16,2,1,2,1,2,1,2}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 23: 
		{ 
			DWORD r[]={4,2,1,2}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 24: 
		{ 
			DWORD r[]={4,2,1,2,1,2}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 25: 
		{ 
			DWORD r[]={8,2,1,2,4,2,1,2}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,1,&lb,rn,r); 
		} 
		break; 
	case 26: 
		{ 
			DWORD r[]={1,6}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,nWidth,&lb,rn,r); 
		} 
		break; 
	case 57: 
		 
		break; 
	case 90: 
		{ 
			DWORD r[]={6,6}; 
			rn=sizeof(r)/sizeof(DWORD); 
			pen->CreatePen(PS_GEOMETRIC|PS_USERSTYLE|PS_ENDCAP_FLAT|PS_JOIN_BEVEL,nWidth,&lb,rn,r); 
		} 
		break; 
	case 91: 
		{ 
		} 
		break; 
	case 118: 
		{ 
		} 
		break; 
	} 
}