?? ptctrl_brush.cpp
字號:
#include "StdAfx.h"
#include "PtCtrl_Brush.h"
#include "CEPaint.h"
#include <afx.h>
PtCtrl_Brush g_ptctl_brush;
INT InitPbCtrl_Brush(PtCtrl_Brush *pPtCtrl_Brush)
{
InitPbCtrlBase((PtCtrlBase*)pPtCtrl_Brush);
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_Init = PtCtrl_Brush_Init;
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_Destroy = PtCtrl_Brush_Destroy;
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_OnPaintStart = PtCtrl_Brush_OnPaintStart;
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_OnPaintEnd = PtCtrl_Brush_OnPaintEnd;
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_OnStyleChange = PtCtrl_Brush_OnStyleChange;
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_OnColorChange = PtCtrl_Brush_OnColorChange;
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_OnMouseDown = PtCtrl_Brush_OnMouseDown;
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_OnMouseMove = PtCtrl_Brush_OnMouseMove;
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_OnMouseRelease = PtCtrl_Brush_OnMouseRelease;
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_OnDrawBoard = PtCtrl_Brush_OnDrawBoard;
pPtCtrl_Brush->m_ptctrl_base.PtCtrl_OnDrawStyle = PtCtrl_Brush_OnDrawStyle;
return 0;
}
INT PtCtrl_Brush_Init(PtCtrlBase* pPtCtrl,INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_Init(pPtCtrl);
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
pPtCtrl_Brush->m_ptctrl_base.m_ctrl_id = PtCtrlType_Brush;
pPtCtrl_Brush->m_opt_flag = PtCtrl_Brush_Nothing;
pPtCtrl_Brush->cx = -1;
pPtCtrl_Brush->cy = -1;
pPtCtrl_Brush->m_pen = NULL;
return 0;
}
INT PtCtrl_Brush_Destroy(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_Destroy(pPtCtrl);
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
if(pPtCtrl_Brush->m_pen != NULL)
DeleteObject(pPtCtrl_Brush->m_pen);
return 0;
}
INT PtCtrl_Brush_OnPaintStart(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnPaintStart(pPtCtrl);
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
pPtCtrl->PtCtrl_OnColorChange(pPtCtrl,m_pt_app_info.m_color_cur,0);
return 0;
}
INT PtCtrl_Brush_OnPaintEnd(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnPaintEnd(pPtCtrl);
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
pPtCtrl_Brush->cx = -1;
pPtCtrl_Brush->cy = -1;
pPtCtrl_Brush->m_opt_flag = PtCtrl_Brush_Nothing;
return 0;
}
INT PtCtrl_Brush_OnStyleChange(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnStyleChange(pPtCtrl,tx);
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
return 0;
}
INT PtCtrl_Brush_OnColorChange(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnColorChange(pPtCtrl,tx,ty);
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
if(pPtCtrl_Brush->m_pen != NULL)
DeleteObject(pPtCtrl_Brush->m_pen);
pPtCtrl_Brush->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
return 0;
}
INT PtCtrl_Brush_OnMouseDown(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseDown(pPtCtrl);
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
switch(pPtCtrl_Brush->m_opt_flag)
{
case PtCtrl_Brush_Nothing:
pPtCtrl_Brush->m_opt_flag = PtCtrl_Brush_SetPixel;
pPtCtrl_Brush->m_ptctrl_base.m_cx = tx;
pPtCtrl_Brush->m_ptctrl_base.m_cy = ty;
pPtCtrl_Brush->cx = tx;
pPtCtrl_Brush->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_Brush_OnMouseMove(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseMove(pPtCtrl);
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
switch(pPtCtrl_Brush->m_opt_flag)
{
case PtCtrl_Brush_SetPixel:
case PtCtrl_Brush_LinkLine:
if(pPtCtrl->m_mouse_state & PT_MOUSE_DOWN )
{
TRACE(L"OnMouseMove\n");
pPtCtrl_Brush->m_opt_flag = PtCtrl_Brush_LinkLine;
pPtCtrl_Brush->cx = tx;
pPtCtrl_Brush->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_Brush->m_opt_flag = PtCtrl_Brush_Nothing;
break;
case PtCtrl_Brush_ResetCursor:
pPtCtrl_Brush->m_opt_flag = PtCtrl_Brush_Nothing;
break;
}
return 0;
}
INT PtCtrl_Brush_OnMouseRelease(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseRelease(pPtCtrl);
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
switch(pPtCtrl_Brush->m_opt_flag)
{
case PtCtrl_Brush_SetPixel:
pPtCtrl_Brush->m_opt_flag = PtCtrl_Brush_Nothing;
break;
case PtCtrl_Brush_LinkLine:
{
INT cx,cy;
RECT rt;
pPtCtrl_Brush->m_opt_flag = PtCtrl_Brush_ResetCursor;
cx = pPtCtrl_Brush->cx - m_pt_app_info.m_pt_bakup_pos.x;
cx = cx << m_pt_app_info.m_pt_zoom_size;
cy = pPtCtrl_Brush->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_Brush_OnDrawBoard(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
RECT rt;
RECT rt_base;
INT cx,cy;
HBRUSH hb = CreateSolidBrush(m_pt_app_info.m_color_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_Brush->m_opt_flag)
{
case PtCtrl_Brush_SetPixel:
if(pPtCtrl_Brush->m_ptctrl_base.m_cx == pPtCtrl_Brush->cx && pPtCtrl_Brush->m_ptctrl_base.m_cy == pPtCtrl_Brush->cy)
{
TRACE(L"point %d ,%d\n", pPtCtrl_Brush->m_ptctrl_base.m_cx,pPtCtrl_Brush->m_ptctrl_base.m_cy);
rt.left = pPtCtrl_Brush->cx;
rt.right = pPtCtrl_Brush->cx + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
rt.top = pPtCtrl_Brush->cy;
rt.bottom = pPtCtrl_Brush->cy + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
FillRect(m_pt_app_info.m_pt_backup_hdc,&rt,hb);
cx = pPtCtrl_Brush->cx - m_pt_app_info.m_pt_bakup_pos.x;
cx = cx << m_pt_app_info.m_pt_zoom_size;
cy = pPtCtrl_Brush->cy - m_pt_app_info.m_pt_bakup_pos.y;
cy = cy << m_pt_app_info.m_pt_zoom_size;
StretchBlt(pPtCtrl_Brush->m_ptctrl_base.m_pdc,
cx,cy,
(PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style)<<m_pt_app_info.m_pt_zoom_size, (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style)<<m_pt_app_info.m_pt_zoom_size,
m_pt_app_info.m_pt_backup_hdc,
pPtCtrl_Brush->cx,pPtCtrl_Brush->cy,
(PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style), (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style),
SRCCOPY);
}
//TRACE("On Draw Board\n");
break;
case PtCtrl_Brush_LinkLine:
draw_type = 0;
if(pPtCtrl_Brush->cx > pPtCtrl_Brush->m_ptctrl_base.m_cx)
draw_type |= 0x01;
else if(pPtCtrl_Brush->cx < pPtCtrl_Brush->m_ptctrl_base.m_cx)
draw_type |= 0x04;
if(pPtCtrl_Brush->cy > pPtCtrl_Brush->m_ptctrl_base.m_cy)
draw_type |= 0x02;
else if(pPtCtrl_Brush->cy < pPtCtrl_Brush->m_ptctrl_base.m_cy)
draw_type |= 0x08;
TRACE(L"draw_type %d\n",draw_type);
switch(draw_type)
{
case 0x01:
step_count = pPtCtrl_Brush->cx - pPtCtrl_Brush->m_ptctrl_base.m_cx;
step_x = 1;
step_y = 0;
rt_base.left = pPtCtrl_Brush->m_ptctrl_base.m_cx;
rt_base.right = pPtCtrl_Brush->cx + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
rt_base.top = pPtCtrl_Brush->m_ptctrl_base.m_cy;
rt_base.bottom = pPtCtrl_Brush->m_ptctrl_base.m_cy + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
break;
case 0x02:
step_count = pPtCtrl_Brush->cy - pPtCtrl_Brush->m_ptctrl_base.m_cy;
step_x = 0;
step_y = 1;
rt_base.left = pPtCtrl_Brush->m_ptctrl_base.m_cx;
rt_base.right = pPtCtrl_Brush->m_ptctrl_base.m_cx + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
rt_base.top = pPtCtrl_Brush->m_ptctrl_base.m_cy;
rt_base.bottom = pPtCtrl_Brush->cy + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
break;
case 0x04:
step_count = pPtCtrl_Brush->m_ptctrl_base.m_cx - pPtCtrl_Brush->cx;
step_x = -1;
step_y = 0;
rt_base.left = pPtCtrl_Brush->cx;
rt_base.right = pPtCtrl_Brush->m_ptctrl_base.m_cx + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
rt_base.top = pPtCtrl_Brush->m_ptctrl_base.m_cy;
rt_base.bottom = pPtCtrl_Brush->m_ptctrl_base.m_cy + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
break;
case 0x08:
step_count = pPtCtrl_Brush->m_ptctrl_base.m_cy - pPtCtrl_Brush->cy;
step_x = 0;
step_y = -1;
rt_base.left = pPtCtrl_Brush->m_ptctrl_base.m_cx;
rt_base.right = pPtCtrl_Brush->m_ptctrl_base.m_cx + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
rt_base.top = pPtCtrl_Brush->cy;
rt_base.bottom = pPtCtrl_Brush->m_ptctrl_base.m_cy + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
break;
case 0x03:
step_x = pPtCtrl_Brush->cx - pPtCtrl_Brush->m_ptctrl_base.m_cx;
step_y = pPtCtrl_Brush->cy - pPtCtrl_Brush->m_ptctrl_base.m_cy;
if(step_x > step_y)
{
step_count = step_x;
step_x = 1;
step_y = step_y/(float)step_count;
}
else
{
step_count = step_y;
step_y = 1;
step_x = step_x/(float)step_count;
}
rt_base.left = pPtCtrl_Brush->m_ptctrl_base.m_cx;
rt_base.right = pPtCtrl_Brush->cx + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
rt_base.top = pPtCtrl_Brush->m_ptctrl_base.m_cy;
rt_base.bottom = pPtCtrl_Brush->cy + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
break;
case 0x06:
step_x = pPtCtrl_Brush->m_ptctrl_base.m_cx - pPtCtrl_Brush->cx;
step_y = pPtCtrl_Brush->cy - pPtCtrl_Brush->m_ptctrl_base.m_cy;
if(step_x > step_y)
{
step_count = step_x;
step_x = -1;
step_y = step_y/(float)step_count;
}
else
{
step_count = step_y;
step_y = 1;
step_x = - step_x/(float)step_count;
}
rt_base.left = pPtCtrl_Brush->cx;
rt_base.right = pPtCtrl_Brush->m_ptctrl_base.m_cx + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
rt_base.top = pPtCtrl_Brush->m_ptctrl_base.m_cy;
rt_base.bottom = pPtCtrl_Brush->cy + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
break;
case 0x0c:
step_x = pPtCtrl_Brush->m_ptctrl_base.m_cx - pPtCtrl_Brush->cx;
step_y = pPtCtrl_Brush->m_ptctrl_base.m_cy - pPtCtrl_Brush->cy;
if(step_x > step_y)
{
step_count = step_x;
step_x = -1;
step_y = -step_y/(float)step_count;
}
else
{
step_count = step_y;
step_y = -1;
step_x = -step_x/(float)step_count;
}
rt_base.left = pPtCtrl_Brush->cx;
rt_base.right = pPtCtrl_Brush->m_ptctrl_base.m_cx + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
rt_base.top = pPtCtrl_Brush->cy;
rt_base.bottom = pPtCtrl_Brush->m_ptctrl_base.m_cy + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
break;
case 0x09:
step_x = pPtCtrl_Brush->cx - pPtCtrl_Brush->m_ptctrl_base.m_cx;
step_y = pPtCtrl_Brush->m_ptctrl_base.m_cy - pPtCtrl_Brush->cy;
if(step_x > step_y)
{
step_count = step_x;
step_x = 1;
step_y = -step_y/(float)step_count;
}
else
{
step_count = step_y;
step_y = -1;
step_x = step_x/(float)step_count;
}
rt_base.left = pPtCtrl_Brush->m_ptctrl_base.m_cx;
rt_base.right = pPtCtrl_Brush->cx + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
rt_base.top = pPtCtrl_Brush->cy;
rt_base.bottom = pPtCtrl_Brush->m_ptctrl_base.m_cy + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
break;
default : return 1;
}
f_x1 = rt.left = pPtCtrl_Brush->m_ptctrl_base.m_cx;
f_x2 = rt.right = pPtCtrl_Brush->m_ptctrl_base.m_cx + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
f_y1 = rt.top = pPtCtrl_Brush->m_ptctrl_base.m_cy;
f_y2 = rt.bottom = pPtCtrl_Brush->m_ptctrl_base.m_cy + (PT_BRUSH_WID << pPtCtrl_Brush->m_ptctrl_base.m_ctrl_style);
for(loop = 0; loop < step_count; loop++)
{
f_x1 += step_x;
f_x2 += step_x;
f_y1 += step_y;
f_y2 += step_y;
rt.left = f_x1;
rt.right = f_x2;
rt.top = f_y1;
rt.bottom = f_y2;
FillRect(m_pt_app_info.m_pt_backup_hdc,&rt,hb);
}
cx = rt_base.left - m_pt_app_info.m_pt_bakup_pos.x;
cx = cx << m_pt_app_info.m_pt_zoom_size;
cy = rt_base.top - m_pt_app_info.m_pt_bakup_pos.y;
cy = cy << m_pt_app_info.m_pt_zoom_size;
StretchBlt(pPtCtrl_Brush->m_ptctrl_base.m_pdc,
cx,cy,
(rt_base.right - rt_base.left)<<m_pt_app_info.m_pt_zoom_size, (rt_base.bottom - rt_base.top)<<m_pt_app_info.m_pt_zoom_size,
m_pt_app_info.m_pt_backup_hdc,
rt_base.left,rt_base.top,
(rt_base.right - rt_base.left),(rt_base.bottom - rt_base.top),
SRCCOPY);
// StretchBlt(pPtCtrl_Brush->m_ptctrl_base.m_pdc,
// 0,0,
// m_pt_app_info.m_pt_draw_rect.right,m_pt_app_info.m_pt_draw_rect.bottom,
// m_pt_app_info.m_pt_backup_hdc,
// m_pt_app_info.m_pt_bakup_pos.x,m_pt_app_info.m_pt_bakup_pos.y,
// m_pt_app_info.m_pt_draw_rect.right >> m_pt_app_info.m_pt_zoom_size,m_pt_app_info.m_pt_draw_rect.bottom >> m_pt_app_info.m_pt_zoom_size,
// SRCCOPY);
pPtCtrl_Brush->m_ptctrl_base.m_cx = pPtCtrl_Brush->cx;
pPtCtrl_Brush->m_ptctrl_base.m_cy = pPtCtrl_Brush->cy;
break;
default :
pPtCtrl_Brush->m_opt_flag = PtCtrl_Brush_Nothing;
return 1;
}
return 0;
}
INT PtCtrl_Brush_OnDrawStyle(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnDrawStyle(pPtCtrl,tx);
PtCtrl_Brush *pPtCtrl_Brush = (PtCtrl_Brush*)pPtCtrl;
HPEN h_pen;
RECT rt;
GetWindowRect(m_pt_app_info.m_pt_style_bn_hwnd[tx],&rt);
OffsetRect(&rt,-rt.left,-rt.top);
if(tx == pPtCtrl->m_ctrl_style)
FillRect(pPtCtrl->m_pdc,&rt,(HBRUSH)GetStockObject(WHITE_BRUSH));
h_pen = CreatePen(PS_SOLID,PT_BRUSH_WID<<tx,0);
MoveToEx(pPtCtrl->m_pdc,0,rt.bottom>>1 ,NULL);
SelectObject(pPtCtrl->m_pdc,h_pen);
LineTo(pPtCtrl->m_pdc,rt.right - 1,rt.bottom>>1);
SelectObject(pPtCtrl->m_pdc,GetStockObject(WHITE_PEN));
DeleteObject(h_pen);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -