📄 ptctrl_eraser.cpp
字号:
#include "StdAfx.h"
#include "PtCtrl_Eraser.h"
#include "CEPaint.h"
//#include <afx.h>
PtCtrl_Eraser g_ptctl_eraser;
INT InitPbCtrl_Eraser(PtCtrl_Eraser *pPtCtrl_Eraser)
{
InitPbCtrlBase((PtCtrlBase*)pPtCtrl_Eraser);
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_Init = PtCtrl_Eraser_Init;
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_Destroy = PtCtrl_Eraser_Destroy;
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_OnPaintStart = PtCtrl_Eraser_OnPaintStart;
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_OnPaintEnd = PtCtrl_Eraser_OnPaintEnd;
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_OnStyleChange = PtCtrl_Eraser_OnStyleChange;
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_OnColorChange = PtCtrl_Eraser_OnColorChange;
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_OnMouseDown = PtCtrl_Eraser_OnMouseDown;
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_OnMouseMove = PtCtrl_Eraser_OnMouseMove;
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_OnMouseRelease = PtCtrl_Eraser_OnMouseRelease;
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_OnDrawBoard = PtCtrl_Eraser_OnDrawBoard;
pPtCtrl_Eraser->m_ptctrl_base.PtCtrl_OnDrawStyle = PtCtrl_Eraser_OnDrawStyle;
return 0;
}
INT PtCtrl_Eraser_Init(PtCtrlBase* pPtCtrl,INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_Init(pPtCtrl);
PtCtrl_Eraser *pPtCtrl_Eraser = (PtCtrl_Eraser*)pPtCtrl;
pPtCtrl_Eraser->m_ptctrl_base.m_ctrl_id = PtCtrlType_Eraser;
pPtCtrl_Eraser->m_opt_flag = PtCtrl_Eraser_Nothing;
pPtCtrl_Eraser->cx = -1;
pPtCtrl_Eraser->cy = -1;
pPtCtrl_Eraser->m_pen = NULL;
return 0;
}
INT PtCtrl_Eraser_Destroy(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_Destroy(pPtCtrl);
PtCtrl_Eraser *pPtCtrl_Eraser = (PtCtrl_Eraser*)pPtCtrl;
if(pPtCtrl_Eraser->m_pen != NULL)
DeleteObject(pPtCtrl_Eraser->m_pen);
return 0;
}
INT PtCtrl_Eraser_OnPaintStart(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnPaintStart(pPtCtrl);
PtCtrl_Eraser *pPtCtrl_Eraser = (PtCtrl_Eraser*)pPtCtrl;
pPtCtrl->PtCtrl_OnColorChange(pPtCtrl,m_pt_app_info.m_color_cur,0);
return 0;
}
INT PtCtrl_Eraser_OnPaintEnd(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnPaintEnd(pPtCtrl);
PtCtrl_Eraser *pPtCtrl_Eraser = (PtCtrl_Eraser*)pPtCtrl;
pPtCtrl_Eraser->cx = -1;
pPtCtrl_Eraser->cy = -1;
pPtCtrl_Eraser->m_opt_flag = PtCtrl_Eraser_Nothing;
return 0;
}
INT PtCtrl_Eraser_OnStyleChange(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnStyleChange(pPtCtrl,tx);
PtCtrl_Eraser *pPtCtrl_Eraser = (PtCtrl_Eraser*)pPtCtrl;
HCURSOR hcr;
switch(pPtCtrl_Eraser->m_ptctrl_base.m_ctrl_style)
{
case 0:
hcr = LoadCursor(m_pt_app_info.m_hInst,(TCHAR*)IDC_CURSOR_ERASER1);
break;
case 1:
hcr = LoadCursor(m_pt_app_info.m_hInst,(TCHAR*)IDC_CURSOR_ERASER);
break;
case 2:
hcr = LoadCursor(m_pt_app_info.m_hInst,(TCHAR*)IDC_CURSOR_ERASER2);
break;
}
SetClassLong(m_pt_app_info.m_pt_board_hwnd,GCL_HCURSOR,(LONG)hcr);
return 0;
}
INT PtCtrl_Eraser_OnColorChange(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnColorChange(pPtCtrl,tx,ty);
PtCtrl_Eraser *pPtCtrl_Eraser = (PtCtrl_Eraser*)pPtCtrl;
if(pPtCtrl_Eraser->m_pen != NULL)
DeleteObject(pPtCtrl_Eraser->m_pen);
pPtCtrl_Eraser->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
return 0;
}
INT PtCtrl_Eraser_OnMouseDown(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseDown(pPtCtrl);
PtCtrl_Eraser *pPtCtrl_Eraser = (PtCtrl_Eraser*)pPtCtrl;
switch(pPtCtrl_Eraser->m_opt_flag)
{
case PtCtrl_Eraser_Nothing:
pPtCtrl_Eraser->m_opt_flag = PtCtrl_Eraser_SetPixel;
pPtCtrl_Eraser->m_ptctrl_base.m_cx = tx;
pPtCtrl_Eraser->m_ptctrl_base.m_cy = ty;
pPtCtrl_Eraser->cx = tx;
pPtCtrl_Eraser->cy = ty;
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_PTCTRL;
InvalidateRect(m_pt_app_info.m_pt_board_hwnd, &m_pt_app_info.m_pt_board_rect,FALSE);
break;
}
//TRACE(L"On Mouse Down\n");
return 0;
}
INT PtCtrl_Eraser_OnMouseMove(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseMove(pPtCtrl);
PtCtrl_Eraser *pPtCtrl_Eraser = (PtCtrl_Eraser*)pPtCtrl;
switch(pPtCtrl_Eraser->m_opt_flag)
{
case PtCtrl_Eraser_SetPixel:
case PtCtrl_Eraser_LinkLine:
if(pPtCtrl->m_mouse_state & PT_MOUSE_DOWN )
{
//TRACE(L"OnMouseMove\n");
pPtCtrl_Eraser->m_opt_flag = PtCtrl_Eraser_LinkLine;
pPtCtrl_Eraser->cx = tx;
pPtCtrl_Eraser->cy = ty;
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_PTCTRL;
InvalidateRect(m_pt_app_info.m_pt_board_hwnd, &m_pt_app_info.m_pt_board_rect,FALSE);
}
else
pPtCtrl_Eraser->m_opt_flag = PtCtrl_Eraser_Nothing;
break;
case PtCtrl_Eraser_ResetCursor:
pPtCtrl_Eraser->m_opt_flag = PtCtrl_Eraser_Nothing;
break;
}
return 0;
}
INT PtCtrl_Eraser_OnMouseRelease(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseRelease(pPtCtrl);
PtCtrl_Eraser *pPtCtrl_Eraser = (PtCtrl_Eraser*)pPtCtrl;
switch(pPtCtrl_Eraser->m_opt_flag)
{
case PtCtrl_Eraser_SetPixel:
pPtCtrl_Eraser->m_opt_flag = PtCtrl_Eraser_Nothing;
break;
case PtCtrl_Eraser_LinkLine:
{
INT cx,cy;
RECT rt;
pPtCtrl_Eraser->m_opt_flag = PtCtrl_Eraser_ResetCursor;
cx = pPtCtrl_Eraser->cx - m_pt_app_info.m_pt_bakup_pos.x;
cx = cx << m_pt_app_info.m_pt_zoom_size;
cy = pPtCtrl_Eraser->cy - m_pt_app_info.m_pt_bakup_pos.y;
cy = cy << m_pt_app_info.m_pt_zoom_size;
GetWindowRect(m_pt_app_info.m_pt_board_hwnd,&rt);
SetCursorPos(rt.left+cx,rt.top+cy);
}
break;
}
return 0;
}
INT PtCtrl_Eraser_OnDrawBoard(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrl_Eraser *pPtCtrl_Eraser = (PtCtrl_Eraser*)pPtCtrl;
RECT rt;
RECT rt_base;
INT cx,cy;
HBRUSH hb = CreateSolidBrush(m_pt_app_info.m_color_bk_cur);
INT loop;
INT step_count;
float step_x;
float step_y;
float f_x1,f_x2,f_y1,f_y2;
INT draw_type;
switch(pPtCtrl_Eraser->m_opt_flag)
{
case PtCtrl_Eraser_SetPixel:
if(pPtCtrl_Eraser->m_ptctrl_base.m_cx == pPtCtrl_Eraser->cx && pPtCtrl_Eraser->m_ptctrl_base.m_cy == pPtCtrl_Eraser->cy)
{
rt.left = pPtCtrl_Eraser->cx;
rt.right = pPtCtrl_Eraser->cx + (PT_ERASER_WID << pPtCtrl_Eraser->m_ptctrl_base.m_ctrl_style);
rt.top = pPtCtrl_Eraser->cy;
rt.bottom = pPtCtrl_Eraser->cy + (PT_ERASER_WID << pPtCtrl_Eraser->m_ptctrl_base.m_ctrl_style);
FillRect(m_pt_app_info.m_pt_backup_hdc,&rt,hb);
cx = pPtCtrl_Eraser->cx - m_pt_app_info.m_pt_bakup_pos.x;
cx = cx << m_pt_app_info.m_pt_zoom_size;
cy = pPtCtrl_Eraser->cy - m_pt_app_info.m_pt_bakup_pos.y;
cy = cy << m_pt_app_info.m_pt_zoom_size;
StretchBlt(pPtCtrl_Eraser->m_ptctrl_base.m_pdc,
cx,cy,
(PT_ERASER_WID << pPtCtrl_Eraser->m_ptctrl_base.m_ctrl_style)<<m_pt_app_info.m_pt_zoom_size, (PT_ERASER_WID << pPtCtrl_Eraser->m_ptctrl_base.m_ctrl_style)<<m_pt_app_info.m_pt_zoom_size,
m_pt_app_info.m_pt_backup_hdc,
pPtCtrl_Eraser->cx,pPtCtrl_Eraser->cy,
(PT_ERASER_WID << pPtCtrl_Eraser->m_ptctrl_base.m_ctrl_style), (PT_ERASER_WID << pPtCtrl_Eraser->m_ptctrl_base.m_ctrl_style),
SRCCOPY);
}
//TRACE("On Draw Board\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -