📄 canvas.cpp
字号:
#include "Stdafx.h"
#pragma warning (disable:4786)
#include"canvas.h"
Canvas::Canvas():iMode(0),Choose_Mode(0),iState(0),Choose_ID(0),IntFont(0),fSave(false)
{
vec_font.push_back("Courier New");
vec_font.push_back("Courier New Bold");
vec_font.push_back("Courier New Italic");
vec_font.push_back("Courier New Bold Italic");
vec_font.push_back("Times New Roman");
vec_font.push_back("Times New Roman Bold");
vec_font.push_back("Times New Roman Italic");
vec_font.push_back("Times New Roman Bold Italic");
vec_font.push_back("Arial");
vec_font.push_back("Arial Bold");
vec_font.push_back("Arial Italic");
vec_font.push_back("Arial Bold Italic");
vec_font.push_back("Symbol");
vec_font.push_back("楷体_GB2312");
vec_font.push_back("宋体");
vec_font.push_back("隶书");
vec_font.push_back("黑体");
vec_font.push_back("幼圆");
}
int Canvas::GetMode()
{
return iMode;
}
bool Canvas::SetMode(int x)
{
iMode = x;
return true;
}
int Canvas::GetState()
{
return iState;
}
bool Canvas::SetState(int x)
{
iState = x;
return true;
}
int Canvas::GetFont()
{
return IntFont;
}
bool Canvas::SetFont(int x)
{
IntFont = x;
return true;
}
int Canvas::GetChoose_Mode()
{
return Choose_Mode;
}
bool Canvas::Draw(HWND hWnd)
{
HDC hDc;
//PAINTSTRUCT ps;
for(int i =0 ;i< vec_line.size();i++)
{
hDc = ::GetDC(hWnd);
if(Choose_Mode==1 && i == Choose_ID)
{
::SelectObject(hDc, ::CreatePen(PS_DASHDOT, 1, RGB(255,0,0)));
::MoveToEx(hDc,vec_line[i].start_x,vec_line[i].start_y,NULL);
::LineTo(hDc,vec_line[i].end_x,vec_line[i].end_y);
}
else
{
::MoveToEx(hDc,vec_line[i].start_x,vec_line[i].start_y,NULL);
::LineTo(hDc,vec_line[i].end_x,vec_line[i].end_y);
}
::ReleaseDC(hWnd,hDc);
}
for( int j=0 ;j< vec_rect.size();j++)
{
hDc = ::GetDC(hWnd);
if(Choose_Mode==2 && j == Choose_ID)
{
::SelectObject(hDc, ::CreatePen(PS_DASHDOT, 1, RGB(255,0,0)));
::SelectObject(hDc, ::GetStockObject(NULL_BRUSH));
::Rectangle(hDc,vec_rect[j].start_x,vec_rect[j].start_y,vec_rect[j].end_x,vec_rect[j].end_y);
}
else
{
::SelectObject(hDc, ::GetStockObject(NULL_BRUSH));
::Rectangle(hDc,vec_rect[j].start_x,vec_rect[j].start_y,vec_rect[j].end_x,vec_rect[j].end_y);
}
::ReleaseDC(hWnd,hDc);
}
for(int l=0;l< vec_ellipse.size(); l++)
{
hDc = ::GetDC(hWnd);
if(Choose_Mode==5 && l == Choose_ID)
{
::SelectObject(hDc, ::CreatePen(PS_DASHDOT, 1, RGB(255,0,0)));
::SelectObject(hDc, ::GetStockObject(NULL_BRUSH));
::Ellipse(hDc,vec_ellipse[l].start_x,vec_ellipse[l].start_y,vec_ellipse[l].end_x,vec_ellipse[l].end_y);
}
else
{
::SelectObject(hDc, ::GetStockObject(NULL_BRUSH));
::Ellipse(hDc,vec_ellipse[l].start_x,vec_ellipse[l].start_y,vec_ellipse[l].end_x,vec_ellipse[l].end_y);
}
::ReleaseDC(hWnd,hDc);
}
for( int k=0;k< vec_text.size();k++)
{
HFONT hF;
TEXTMETRIC tm;
hDc = ::GetDC(hWnd);
//hDc = BeginPaint(hWnd,&ps);
if(Choose_Mode==3 && k == Choose_ID)
{
::SetTextColor(hDc, RGB(255,0,0));
if(vec_text[k].IFont ==0)
::TextOut(hDc,vec_text[k].x,vec_text[k].y,vec_text[k].sText.c_str(),strlen(vec_text[k].sText.c_str()));
else
{
hF = CreateFont(20,0,0,0,400,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,vec_font[vec_text[k].IFont-1].c_str());
SelectObject(hDc,hF);
GetTextMetrics(hDc,&tm);
::TextOut(hDc,vec_text[k].x,vec_text[k].y,vec_text[k].sText.c_str(),strlen(vec_text[k].sText.c_str()));
DeleteObject(hF);
//InvalidateRect(hWnd,NULL,1);
}
}
else
{
if(vec_text[k].IFont ==0)
::TextOut(hDc,vec_text[k].x,vec_text[k].y,vec_text[k].sText.c_str(),strlen(vec_text[k].sText.c_str()));
else
{
hF = CreateFont(20,0,0,0,400,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,vec_font[vec_text[k].IFont-1].c_str());
SelectObject(hDc,hF);
GetTextMetrics(hDc,&tm);
::TextOut(hDc,vec_text[k].x,vec_text[k].y,vec_text[k].sText.c_str(),strlen(vec_text[k].sText.c_str()));
DeleteObject(hF);
//InvalidateRect(hWnd,NULL,1);
}
}
//EndPaint(hWnd,&ps);
::ReleaseDC(hWnd,hDc);
}
return true;
}
bool Canvas::Choose_text(HWND hWnd)
{
HDC hDc;
HFONT hF;
TEXTMETRIC tm;
hDc = ::GetDC(hWnd);
if( IntFont== 0)
::TextOut(hDc,vec_text[Choose_ID].x,vec_text[Choose_ID].y,vec_text[Choose_ID].sText.c_str(),strlen(vec_text[Choose_ID].sText.c_str()));
else
{
hF = CreateFont(20,0,0,0,400,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,vec_font[IntFont-1].c_str());
SelectObject(hDc,hF);
GetTextMetrics(hDc,&tm);
::TextOut(hDc,vec_text[Choose_ID].x,vec_text[Choose_ID].y,vec_text[Choose_ID].sText.c_str(),strlen(vec_text[Choose_ID].sText.c_str()));
DeleteObject(hF);
}
::ReleaseDC(hWnd,hDc);
vec_text[Choose_ID].IFont = IntFont;
return true;
}
bool Canvas::Start_line(int x,int y)
{
iLine.start_x = x;
iLine.start_y = y;
temp.x = x;
temp.y = y;
iState = 1;
return true;
}
bool Canvas::Move_line(HWND hWnd,int x,int y)
{
HDC hDc;
hDc = ::GetDC(hWnd);
::SelectObject(hDc, ::GetStockObject(WHITE_PEN));
::MoveToEx(hDc,iLine.start_x,iLine.start_y,NULL);
::LineTo(hDc,temp.x ,temp.y );
::SelectObject(hDc, ::GetStockObject(BLACK_PEN));
::MoveToEx(hDc,iLine.start_x,iLine.start_y,NULL);
::LineTo(hDc,x,y);
::ReleaseDC(hWnd,hDc);
temp.x = x;
temp.y= y;
return true;
}
bool Canvas::Draw_line(HWND hWnd,int x,int y)
{
HDC hDc;
hDc = ::GetDC(hWnd);
::MoveToEx(hDc,iLine.start_x,iLine.start_y,NULL);
::LineTo(hDc,x,y);
::ReleaseDC(hWnd,hDc);
SHAPE_POINT temp_line;
temp_line.start_x = iLine.start_x;
temp_line.start_y = iLine.start_y;
temp_line.end_x = x;
temp_line.end_y = y;
vec_line.push_back(temp_line);
iState = 0;
return true;
}
bool Canvas::Start_rect(int x,int y)
{
iRect.start_x = x;
iRect.start_y = y;
temp.x = x;
temp.y = y;
iState =1;
return true;
}
bool Canvas::Move_rect(HWND hWnd,int x,int y)
{
HDC hDc;
hDc = ::GetDC(hWnd);
::SelectObject(hDc, ::GetStockObject(WHITE_PEN));
::SelectObject(hDc, ::GetStockObject(NULL_BRUSH));
::Rectangle(hDc,iRect.start_x,iRect.start_y,temp.x,temp.y);
::SelectObject(hDc, ::GetStockObject(BLACK_PEN));
::SelectObject(hDc, ::GetStockObject(NULL_BRUSH));
::Rectangle(hDc,iRect.start_x,iRect.start_y,x,y);
::ReleaseDC(hWnd,hDc);
temp.x = x;
temp.y = y;
return true;
}
bool Canvas::Draw_rect(HWND hWnd,int x,int y)
{
HDC hDc;
hDc = ::GetDC(hWnd);
::SelectObject(hDc, ::GetStockObject(NULL_BRUSH));
::Rectangle(hDc,iRect.start_x,iRect.start_y,x,y);
::ReleaseDC(hWnd,hDc);
SHAPE_POINT temp_rect;
temp_rect.start_x = iRect.start_x;
temp_rect.start_y = iRect.start_y;
temp_rect.end_x = x;
temp_rect.end_y = y;
vec_rect.push_back(temp_rect);
iState = 0;
return true;
}
bool Canvas::Start_ellipse(int x, int y)
{
iEllipse.start_x = x;
iEllipse.start_y = y;
temp.x = x;
temp.y = y;
iState =1;
return true;
}
bool Canvas::Move_ellipse(HWND hWnd,int x,int y)
{
HDC hDc;
hDc = ::GetDC(hWnd);
::SelectObject(hDc, ::GetStockObject(WHITE_PEN));
::SelectObject(hDc, ::GetStockObject(NULL_BRUSH));
::Ellipse(hDc,iEllipse.start_x,iEllipse.start_y,temp.x,temp.y);
::SelectObject(hDc, ::GetStockObject(BLACK_PEN));
::SelectObject(hDc, ::GetStockObject(NULL_BRUSH));
::Ellipse(hDc,iEllipse.start_x,iEllipse.start_y,x,y);
::ReleaseDC(hWnd,hDc);
temp.x = x;
temp.y= y;
return true;
}
bool Canvas::Draw_ellipse(HWND hWnd,int x,int y)
{
HDC hDc;
hDc = ::GetDC(hWnd);
::SelectObject(hDc, ::GetStockObject(NULL_BRUSH));
::Ellipse(hDc,iEllipse.start_x,iEllipse.start_y,x,y);
::ReleaseDC(hWnd,hDc);
SHAPE_POINT temp_ellipse;
temp_ellipse.start_x = iEllipse.start_x;
temp_ellipse.start_y = iEllipse.start_y;
temp_ellipse.end_x = x;
temp_ellipse.end_y = y;
vec_ellipse.push_back(temp_ellipse);
iState = 0;
return true;
}
bool Canvas::Input_text(HWND hWnd, int x,int y, char pText[256])
{
HDC hDc;
HFONT hF;
hDc =::GetDC(hWnd);
TEXTMETRIC tm;
if(IntFont == 0)
{
::TextOut(hDc,x,y,pText,strlen(pText));
}
else
{
hF = CreateFont(20,0,0,0,400,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,vec_font[IntFont-1].c_str());
SelectObject(hDc,hF);
GetTextMetrics(hDc,&tm);
::TextOut(hDc,x,y,pText,strlen(pText));
DeleteObject(hF);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -