📄 ptctrl_plyon.cpp
字号:
#include "StdAfx.h"
#include "PtCtrl_Plyon.h"
#include "CEPaint.h"
#include <afx.h>
PtCtrl_Plyon g_ptctl_plyon;
INT InitPbCtrl_Plyon(PtCtrl_Plyon *pPtCtrl_Plyon)
{
InitPbCtrlBase((PtCtrlBase*)pPtCtrl_Plyon);
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_Init = PtCtrl_Plyon_Init;
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_Destroy = PtCtrl_Plyon_Destroy;
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_OnPaintStart = PtCtrl_Plyon_OnPaintStart;
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_OnPaintEnd = PtCtrl_Plyon_OnPaintEnd;
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_OnStyleChange = PtCtrl_Plyon_OnStyleChange;
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_OnColorChange = PtCtrl_Plyon_OnColorChange;
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_OnMouseDown = PtCtrl_Plyon_OnMouseDown;
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_OnMouseMove = PtCtrl_Plyon_OnMouseMove;
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_OnMouseRelease = PtCtrl_Plyon_OnMouseRelease;
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_OnDrawBoard = PtCtrl_Plyon_OnDrawBoard;
pPtCtrl_Plyon->m_ptctrl_base.PtCtrl_OnDrawStyle = PtCtrl_Plyon_OnDrawStyle;
return 0;
}
INT PtCtrl_Plyon_Init(PtCtrlBase* pPtCtrl,INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_Init(pPtCtrl);
PtCtrl_Plyon *pPtCtrl_Plyon = (PtCtrl_Plyon*)pPtCtrl;
pPtCtrl_Plyon->m_ptctrl_base.m_ctrl_id = PtCtrlType_Plyon;
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_Nothing;
pPtCtrl_Plyon->cx = -1;
pPtCtrl_Plyon->cy = -1;
pPtCtrl_Plyon->m_pen = NULL;
pPtCtrl_Plyon->m_brush = NULL;
pPtCtrl_Plyon->m_init_draw_flag = FALSE;
pPtCtrl_Plyon->m_bak_hdc = NULL;
pPtCtrl_Plyon->m_bak_hbmp = NULL;
memset(&pPtCtrl_Plyon->m_bak_rect,0,sizeof(RECT));
memset(&pPtCtrl_Plyon->m_point,0,sizeof(pPtCtrl_Plyon->m_point));
pPtCtrl_Plyon->m_point_count = 0;
return 0;
}
INT PtCtrl_Plyon_Destroy(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_Destroy(pPtCtrl);
PtCtrl_Plyon *pPtCtrl_Plyon = (PtCtrl_Plyon*)pPtCtrl;
if(pPtCtrl_Plyon->m_bak_hdc != NULL)
DeleteDC(pPtCtrl_Plyon->m_bak_hdc);
if(pPtCtrl_Plyon->m_pen != NULL)
DeleteObject(pPtCtrl_Plyon->m_pen);
return 0;
}
INT PtCtrl_Plyon_OnPaintStart(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnPaintStart(pPtCtrl);
PtCtrl_Plyon *pPtCtrl_Plyon = (PtCtrl_Plyon*)pPtCtrl;
pPtCtrl->PtCtrl_OnColorChange(pPtCtrl,m_pt_app_info.m_color_cur,0);
// memset(&pPtCtrl_Plyon->m_point,0,sizeof(pPtCtrl_Plyon->m_point));
// pPtCtrl_Plyon->m_point_count = 0;
return 0;
}
INT PtCtrl_Plyon_OnPaintEnd(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnPaintEnd(pPtCtrl);
PtCtrl_Plyon *pPtCtrl_Plyon = (PtCtrl_Plyon*)pPtCtrl;
pPtCtrl_Plyon->cx = -1;
pPtCtrl_Plyon->cy = -1;
pPtCtrl_Plyon->m_ptctrl_base.m_last_draw_flag = TRUE;
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_PTCTRL;
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_End;
InvalidateRect(m_pt_app_info.m_pt_board_hwnd, &m_pt_app_info.m_pt_board_rect,FALSE);
return 0;
}
INT PtCtrl_Plyon_OnStyleChange(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnStyleChange(pPtCtrl,tx);
PtCtrl_Plyon *pPtCtrl_Plyon = (PtCtrl_Plyon*)pPtCtrl;
if(pPtCtrl_Plyon->m_pen != NULL)
DeleteObject(pPtCtrl_Plyon->m_pen);
if(pPtCtrl_Plyon->m_brush != NULL)
DeleteObject(pPtCtrl_Plyon->m_brush);
switch(pPtCtrl_Plyon->m_ptctrl_base.m_ctrl_style)
{
case 0:
pPtCtrl_Plyon->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
pPtCtrl_Plyon->m_brush = (HBRUSH)GetStockObject(NULL_BRUSH);
break;
case 1:
//pPtCtrl_Plyon->m_pen = (HPEN)GetStockObject(NULL_PEN);
pPtCtrl_Plyon->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
pPtCtrl_Plyon->m_brush = CreateSolidBrush(m_pt_app_info.m_color_cur);
break;
case 2:
pPtCtrl_Plyon->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
// pPtCtrl_Plyon->m_brush = CreateSolidBrush(RGB(
// (m_pt_app_info.m_color_cur | 0x007f0000) >> 16,
// (m_pt_app_info.m_color_cur | 0x00007f00) >> 8,
// m_pt_app_info.m_color_cur | 0x0000007f
// ));
pPtCtrl_Plyon->m_brush = CreateSolidBrush(m_pt_app_info.m_color_bk_cur);
break;
}
return 0;
}
INT PtCtrl_Plyon_OnColorChange(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnColorChange(pPtCtrl,tx,ty);
PtCtrl_Plyon *pPtCtrl_Plyon = (PtCtrl_Plyon*)pPtCtrl;
if(pPtCtrl_Plyon->m_pen != NULL)
DeleteObject(pPtCtrl_Plyon->m_pen);
if(pPtCtrl_Plyon->m_brush != NULL)
DeleteObject(pPtCtrl_Plyon->m_brush);
switch(pPtCtrl_Plyon->m_ptctrl_base.m_ctrl_style)
{
case 0:
pPtCtrl_Plyon->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
pPtCtrl_Plyon->m_brush = (HBRUSH)GetStockObject(NULL_BRUSH);
break;
case 1:
//pPtCtrl_Plyon->m_pen = (HPEN)GetStockObject(NULL_PEN);
pPtCtrl_Plyon->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
pPtCtrl_Plyon->m_brush = CreateSolidBrush(m_pt_app_info.m_color_cur);
break;
case 2:
pPtCtrl_Plyon->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
// pPtCtrl_Plyon->m_brush = CreateSolidBrush(RGB(
// (m_pt_app_info.m_color_cur | 0x007f0000) >> 16,
// (m_pt_app_info.m_color_cur | 0x00007f00) >> 8,
// m_pt_app_info.m_color_cur | 0x0000007f
// ));
pPtCtrl_Plyon->m_brush = CreateSolidBrush(m_pt_app_info.m_color_bk_cur);
break;
}
return 0;
}
INT PtCtrl_Plyon_OnMouseDown(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseDown(pPtCtrl);
PtCtrl_Plyon *pPtCtrl_Plyon = (PtCtrl_Plyon*)pPtCtrl;
switch(pPtCtrl_Plyon->m_opt_flag)
{
case PtCtrl_Plyon_Nothing:
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_Start;
pPtCtrl_Plyon->m_ptctrl_base.m_cx = tx;
pPtCtrl_Plyon->m_ptctrl_base.m_cy = ty;
pPtCtrl_Plyon->cx = tx;
pPtCtrl_Plyon->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;
case PtCtrl_Plyon_LinkFirstEnd:
case PtCtrl_Plyon_LinkMore:
if(pPtCtrl_Plyon->m_point_count >= PT_PLYON_POINT_COUNT)
{
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_End;
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_PTCTRL;
pPtCtrl_Plyon->m_ptctrl_base.m_last_draw_flag = TRUE;
}
else
{
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_LinkMore;
pPtCtrl_Plyon->cx = tx;
pPtCtrl_Plyon->cy = ty;
pPtCtrl_Plyon->m_point[pPtCtrl_Plyon->m_point_count].x = pPtCtrl_Plyon->cx;
pPtCtrl_Plyon->m_point[pPtCtrl_Plyon->m_point_count].y = pPtCtrl_Plyon->cy;
pPtCtrl_Plyon->m_point_count ++;
}
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_Plyon_OnMouseMove(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseMove(pPtCtrl);
PtCtrl_Plyon *pPtCtrl_Plyon = (PtCtrl_Plyon*)pPtCtrl;
switch(pPtCtrl_Plyon->m_opt_flag)
{
case PtCtrl_Plyon_Start:
if(pPtCtrl->m_mouse_state & PT_MOUSE_DOWN)
{
TRACE(L"PtCtrl_Plyon_OnMouseMove1\n");
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_LinkFirst;
pPtCtrl_Plyon->m_point[0].x = pPtCtrl_Plyon->m_ptctrl_base.m_cx;
pPtCtrl_Plyon->m_point[0].y = pPtCtrl_Plyon->m_ptctrl_base.m_cy;
pPtCtrl_Plyon->m_point_count = 1;
pPtCtrl_Plyon->cx = tx;
pPtCtrl_Plyon->cy = ty;
}
else
{
TRACE(L"PtCtrl_Plyon_OnMouseMove 2\n");
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_End;
}
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;
case PtCtrl_Plyon_LinkFirst:
if(pPtCtrl->m_mouse_state & PT_MOUSE_DOWN)
{
TRACE(L"PtCtrl_Plyon_OnMouseMove4\n");
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_LinkFirst;
pPtCtrl_Plyon->cx = tx;
pPtCtrl_Plyon->cy = ty;
}
else
{
TRACE(L"PtCtrl_Plyon_OnMouseMove 5\n");
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_End;
}
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);
default:
TRACE(L"PtCtrl_Plyon_OnMouseMove 3\n");
}
return 0;
}
INT PtCtrl_Plyon_OnMouseRelease(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseRelease(pPtCtrl);
PtCtrl_Plyon *pPtCtrl_Plyon = (PtCtrl_Plyon*)pPtCtrl;
switch(pPtCtrl_Plyon->m_opt_flag)
{
case PtCtrl_Plyon_Start:
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_Nothing;
break;
case PtCtrl_Plyon_LinkFirst:
pPtCtrl_Plyon->m_opt_flag = PtCtrl_Plyon_LinkFirstEnd;
pPtCtrl_Plyon->m_point[pPtCtrl_Plyon->m_point_count].x = pPtCtrl_Plyon->cx;
pPtCtrl_Plyon->m_point[pPtCtrl_Plyon->m_point_count].y = pPtCtrl_Plyon->cy;
pPtCtrl_Plyon->m_point_count ++;
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;
}
return 0;
}
INT PtCtrl_Plyon_OnDrawBoard(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrl_Plyon *pPtCtrl_Plyon = (PtCtrl_Plyon*)pPtCtrl;
RECT draw_rect;
RECT rt;
INT cx,cy;
#define FIX_PIXEL 3
if(!pPtCtrl_Plyon->m_init_draw_flag)
{
pPtCtrl_Plyon->m_bak_hdc = CreateCompatibleDC(m_pt_app_info.m_pt_backup_hdc);
pPtCtrl_Plyon->m_bak_hbmp = CreateCompatibleBitmap(m_pt_app_info.m_pt_backup_hdc,m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth,m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight);
SelectObject(pPtCtrl_Plyon->m_bak_hdc,pPtCtrl_Plyon->m_bak_hbmp);
pPtCtrl_Plyon->m_init_draw_flag = TRUE;
}
static int i;
switch(pPtCtrl_Plyon->m_opt_flag)
{
case PtCtrl_Plyon_Start:
TRACE(L"PtCtrl_Plyon_Start\n");
BitBlt(pPtCtrl_Plyon->m_bak_hdc,0,0,m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth,m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight,m_pt_app_info.m_pt_backup_hdc,0,0,SRCCOPY);
memset(&pPtCtrl_Plyon->m_bak_rect,0,sizeof(RECT));
break;
case PtCtrl_Plyon_LinkFirst:
TRACE(L"PtCtrl_Plyon_LinkFirst %d\n",i++);
if(pPtCtrl_Plyon->m_ptctrl_base.m_cx < pPtCtrl_Plyon->cx)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -