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;
}
}