【VC开源代码栏目提醒】:网学会员为广大网友收集整理了,DrawPicture.cpp,希望对大家有所帮助!
// DrawPicture.cpp: implementation of the DrawPicture class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Designer.h"
#include "DrawPicture.h"
#include "DesignerView.h"
#include "DIBAPI.h"
#include "math.h"
#include "MainFrm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define LINELENTH 50
extern int global_STEP;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
DrawPicture::DrawPicture()
{
PaneNum =0;
}
DrawPicture::~DrawPicture()
{
}
void DrawPicture::Line(CPoint pFrom, CPoint pEnd, CDC *dc,COLORREF rgb,int steplen,float m_jwm,CPoint scroll,bool Saveornot)
{
}
#define PI 3.1415926
void DrawPicture::Circle(CDC *pDC, CPoint MousePosition, COLORREF rgb,float m_jwm, bool saveornot,CPoint scroll,RECTSINFO* PCircle)
{
CBrush cbr;
cbr.CreateSolidBrush(rgb);
int templen = (int)(global_STEP*m_jwm);
CPoint temp ;
temp.x = PCircle->LeftTop.x + scroll.x;
temp.y = PCircle->LeftTop.y + scroll.y;
int radius =(int) (sqrt((MousePosition.x -PCircle->LeftTop.x )*(MousePosition.x - PCircle->LeftTop.x )+(MousePosition.y - PCircle->LeftTop.y)*(MousePosition.y - PCircle->LeftTop.y)));
CPoint wglocation ;
double step = 2*PI/180;
for(int i =0;i<4*LINENUM;i++)
PCircle->RectsInfo[i].location.x = PCircle->RectsInfo[i].location.y = -1;
CPoint currentPoint;
PCircle->RectLen=1;
for(double theta=0.0;theta<=2*PI;theta+=step)
{
int xoffset = (int)(radius*cos(theta));
int yoffset = (int)(radius*sin(theta));
currentPoint.x = PCircle->LeftTop.x + xoffset+scroll.x;
currentPoint.y = PCircle->LeftTop.y + yoffset+scroll.y;
CPoint kkk(0,0);
wglocation = gLocatePoint(currentPoint,m_jwm,kkk);
if(PCircle->RectsInfo[PCircle->RectLen-1].location.x != wglocation.x ||
PCircle->RectsInfo[PCircle->RectLen-1].location.y != wglocation.y)
{
PCircle->RectsInfo[PCircle->RectLen].location = wglocation;
PCircle->RectLen++;
}
}
CMainFrame * pFrame = static_cast <CMainFrame *>(AfxGetMainWnd());
CDesignerView *m_pShowPhotoView = pFrame->GetMainView();
for( i=1;i<(int)PCircle->RectLen;i++)
{
if(PCircle->RectsInfo[i].location.x <0)
PCircle->RectsInfo[i].location.x =0;
if(PCircle->RectsInfo[i].location.y <0)
PCircle->RectsInfo[i].location.y =0;
if(PCircle->RectsInfo[i].location.x >m_pShowPhotoView->m_LineNum.x-1)
PCircle->RectsInfo[i].location.x = m_pShowPhotoView->m_LineNum.x-1;
if(PCircle->RectsInfo[i].location.y >m_pShowPhotoView->m_LineNum.y-1)
PCircle->RectsInfo[i].location.y = m_pShowPhotoView->m_LineNum.y-1;
}
for(i =1;i<(int)PCircle->RectLen;i++)
{
if((PCircle->RectsInfo[i-1].location.y == PCircle->RectsInfo[i].location.y &&
PCircle->RectsInfo[i-1].location.x > PCircle->RectsInfo[i].location.x &&
PCircle->RectsInfo[i].location.y > PCircle->RectsInfo[i+1].location.y &&
PCircle->RectsInfo[i].location.x == PCircle->RectsInfo[i+1].location.x )||
(PCircle->RectsInfo[i-1].location.x == PCircle->RectsInfo[i].location.x &&
PCircle->RectsInfo[i-1].location.y < PCircle->RectsInfo[i].location.y &&
PCircle->RectsInfo[i].location.x > PCircle->RectsInfo[i+1].location.x &&
PCircle->RectsInfo[i].location.y == PCircle->RectsInfo[i+1].location.y )||
(PCircle->RectsInfo[i-1].location.x < PCircle->RectsInfo[i].location.x &&
PCircle->RectsInfo[i-1].location.y == PCircle->RectsInfo[i].location.y &&
PCircle->RectsInfo[i].location.x == PCircle->RectsInfo[i+1].location.x &&
PCircle->RectsInfo[i].location.y < PCircle->RectsInfo[i+1].location.y )||
(PCircle->RectsInfo[i-1].location.x == PCircle->RectsInfo[i].location.x &&
PCircle->RectsInfo[i-1].location.y > PCircle->RectsInfo[i].location.y &&
PCircle->RectsInfo[i].location.x < PCircle->RectsInfo[i+1].location.x &&
PCircle->RectsInfo[i].location.y == PCircle->RectsInfo[i+1].location.y))
PCircle->RectsInfo[i].location = PCircle->RectsInfo[i-1].location;
}
if(PCircle->RectsInfo[2].location.x < PCircle->RectsInfo[1].location.x &&
PCircle->RectsInfo[2].location.y == PCircle->RectsInfo[1].location.y)
PCircle->RectsInfo[2].location = PCircle->RectsInfo[1].location;
if(PCircle->RectsInfo[PCircle->RectLen-1].location.x < PCircle->RectsInfo[1].location.x &&
PCircle->RectsInfo[PCircle->RectLen-1].location.y == PCircle->RectsInfo[1].location.y )
PCircle->RectsInfo[PCircle->RectLen-1].location = PCircle->RectsInfo[1].location;
for(i =1;i<PCircle->RectLen;i++)
{
PCircle->RectsInfo[i].pc = m_pShowPhotoView->m_picture_color[PCircle->RectsInfo[i].location.y][PCircle->RectsInfo[i].location.x];
}
for(i =1;i<(int)PCircle->RectLen;i++)
{
pDC->FillRect(CRect(PCircle->RectsInfo[i].location.x*global_STEP+OFFSET+1-scroll.x,
PCircle->RectsInfo[i].location.y *templen+OFFSET+1-scroll.y,
PCircle->RectsInfo[i].location.x *global_STEP+OFFSET+global_STEP-scroll.x,
PCircle->RectsInfo[i].location.y *templen+OFFSET-scroll.y + templen),&cbr);
if(saveornot == true)
{
m_pShowPhotoView->m_picture_edge[PCircle->RectsInfo[i].location.x][PCircle->RectsInfo[i].location.y] =TRUE;
}
}
PCircle->RightBottom = MousePosition;
cbr.DeleteObject();
}
void DrawPicture::Rectang(CDC *pDC,CPoint LeftTop,CPoint RightBottom,COLORREF rgb,int steplen,float m_jwm,bool Saveornot,CPoint Scroll)
{
CPoint lt = gLocatePoint(LeftTop,m_jwm,Scroll);
CPoint rb = gLocatePoint(RightBottom,m_jwm,Scroll);
int x = lt.x *steplen +OFFSET - Scroll.x ;
int y = lt.y *(int)(steplen *m_jwm) +OFFSET- Scroll.y;
int xx =rb.x *steplen +OFFSET-Scroll.x;
int yy = rb.y *(int)(steplen*m_jwm)+OFFSET-Scroll.y;
CBrush cbr;
cbr.CreateSolidBrush(rgb);
CMainFrame * pFrame = static_cast <CMainFrame *>(AfxGetMainWnd());
CDesignerView *m_pShowPhotoView = pFrame->GetMainView();
CPoint maxline = m_pShowPhotoView->m_LineNum;
for(int i=0;i<=rb.x-lt.x;i++)
{
if(lt.y < 0 || lt.y >maxline.y-1)
continue;
else if(lt.x+i<0 || lt.x +i > maxline.x-1 )
continue;
pDC->FillRect(CRect(x+i*steplen+1,y+1,x+(i+1)*steplen,y+(int)(steplen*m_jwm)),&cbr);
m_pShowPhotoView->m_RectsInfo.RectsInfo[m_pShowPhotoView->m_RectsInfo.RectL
上一篇:
CX120Unit.pas
下一篇:
如何当一个轻松的班主任