📄 ptctrl_cirrect.cpp
字号:
#include "StdAfx.h"
#include "PtCtrl_CirRect.h"
#include "CEPaint.h"
#include <afx.h>
PtCtrl_CirRect g_ptctl_cirrect;
INT InitPbCtrl_CirRect(PtCtrl_CirRect *pPtCtrl_CirRect)
{
InitPbCtrlBase((PtCtrlBase*)pPtCtrl_CirRect);
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_Init = PtCtrl_CirRect_Init;
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_Destroy = PtCtrl_CirRect_Destroy;
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_OnPaintStart = PtCtrl_CirRect_OnPaintStart;
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_OnPaintEnd = PtCtrl_CirRect_OnPaintEnd;
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_OnStyleChange = PtCtrl_CirRect_OnStyleChange;
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_OnColorChange = PtCtrl_CirRect_OnColorChange;
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_OnMouseDown = PtCtrl_CirRect_OnMouseDown;
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_OnMouseMove = PtCtrl_CirRect_OnMouseMove;
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_OnMouseRelease = PtCtrl_CirRect_OnMouseRelease;
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_OnDrawBoard = PtCtrl_CirRect_OnDrawBoard;
pPtCtrl_CirRect->m_ptctrl_base.PtCtrl_OnDrawStyle = PtCtrl_CirRect_OnDrawStyle;
return 0;
}
INT PtCtrl_CirRect_Init(PtCtrlBase* pPtCtrl,INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_Init(pPtCtrl);
PtCtrl_CirRect *pPtCtrl_CirRect = (PtCtrl_CirRect*)pPtCtrl;
pPtCtrl_CirRect->m_ptctrl_base.m_ctrl_id = PtCtrlType_CirRect;
pPtCtrl_CirRect->m_opt_flag = PtCtrl_CirRect_Nothing;
pPtCtrl_CirRect->cx = -1;
pPtCtrl_CirRect->cy = -1;
pPtCtrl_CirRect->m_pen = NULL;
pPtCtrl_CirRect->m_brush = NULL;
pPtCtrl_CirRect->m_init_draw_flag = FALSE;
pPtCtrl_CirRect->m_bak_hdc = NULL;
pPtCtrl_CirRect->m_bak_hbmp = NULL;
memset(&pPtCtrl_CirRect->m_bak_rect,0,sizeof(RECT));
return 0;
}
INT PtCtrl_CirRect_Destroy(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_Destroy(pPtCtrl);
PtCtrl_CirRect *pPtCtrl_CirRect = (PtCtrl_CirRect*)pPtCtrl;
if(pPtCtrl_CirRect->m_bak_hdc != NULL)
DeleteDC(pPtCtrl_CirRect->m_bak_hdc);
if(pPtCtrl_CirRect->m_pen != NULL)
DeleteObject(pPtCtrl_CirRect->m_pen);
return 0;
}
INT PtCtrl_CirRect_OnPaintStart(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnPaintStart(pPtCtrl);
PtCtrl_CirRect *pPtCtrl_CirRect = (PtCtrl_CirRect*)pPtCtrl;
pPtCtrl->PtCtrl_OnColorChange(pPtCtrl,m_pt_app_info.m_color_cur,0);
return 0;
}
INT PtCtrl_CirRect_OnPaintEnd(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnPaintEnd(pPtCtrl);
PtCtrl_CirRect *pPtCtrl_CirRect = (PtCtrl_CirRect*)pPtCtrl;
pPtCtrl_CirRect->cx = -1;
pPtCtrl_CirRect->cy = -1;
pPtCtrl_CirRect->m_opt_flag = PtCtrl_CirRect_Nothing;
return 0;
}
INT PtCtrl_CirRect_OnStyleChange(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnStyleChange(pPtCtrl,tx);
PtCtrl_CirRect *pPtCtrl_CirRect = (PtCtrl_CirRect*)pPtCtrl;
if(pPtCtrl_CirRect->m_pen != NULL)
DeleteObject(pPtCtrl_CirRect->m_pen);
if(pPtCtrl_CirRect->m_brush != NULL)
DeleteObject(pPtCtrl_CirRect->m_brush);
switch(pPtCtrl_CirRect->m_ptctrl_base.m_ctrl_style)
{
case 0:
pPtCtrl_CirRect->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
pPtCtrl_CirRect->m_brush = (HBRUSH)GetStockObject(NULL_BRUSH);
break;
case 1:
pPtCtrl_CirRect->m_pen = (HPEN)GetStockObject(NULL_PEN);
pPtCtrl_CirRect->m_brush = CreateSolidBrush(m_pt_app_info.m_color_cur);
break;
case 2:
pPtCtrl_CirRect->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
// pPtCtrl_CirRect->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_CirRect->m_brush = CreateSolidBrush(m_pt_app_info.m_color_bk_cur);
break;
}
return 0;
}
INT PtCtrl_CirRect_OnColorChange(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnColorChange(pPtCtrl,tx,ty);
PtCtrl_CirRect *pPtCtrl_CirRect = (PtCtrl_CirRect*)pPtCtrl;
if(pPtCtrl_CirRect->m_pen != NULL)
DeleteObject(pPtCtrl_CirRect->m_pen);
if(pPtCtrl_CirRect->m_brush != NULL)
DeleteObject(pPtCtrl_CirRect->m_brush);
switch(pPtCtrl_CirRect->m_ptctrl_base.m_ctrl_style)
{
case 0:
pPtCtrl_CirRect->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
pPtCtrl_CirRect->m_brush = (HBRUSH)GetStockObject(NULL_BRUSH);
break;
case 1:
pPtCtrl_CirRect->m_pen = (HPEN)GetStockObject(NULL_PEN);
pPtCtrl_CirRect->m_brush = CreateSolidBrush(m_pt_app_info.m_color_cur);
break;
case 2:
pPtCtrl_CirRect->m_pen = CreatePen(PS_SOLID,0,m_pt_app_info.m_color_cur);
// pPtCtrl_CirRect->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 | 0x00007f
// ));
pPtCtrl_CirRect->m_brush = CreateSolidBrush(m_pt_app_info.m_color_bk_cur);
break;
}
return 0;
}
INT PtCtrl_CirRect_OnMouseDown(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseDown(pPtCtrl);
PtCtrl_CirRect *pPtCtrl_CirRect = (PtCtrl_CirRect*)pPtCtrl;
switch(pPtCtrl_CirRect->m_opt_flag)
{
case PtCtrl_CirRect_Nothing:
pPtCtrl_CirRect->m_opt_flag = PtCtrl_CirRect_Start;
pPtCtrl_CirRect->m_ptctrl_base.m_cx = tx;
pPtCtrl_CirRect->m_ptctrl_base.m_cy = ty;
pPtCtrl_CirRect->cx = tx;
pPtCtrl_CirRect->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_CirRect_OnMouseMove(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseMove(pPtCtrl);
PtCtrl_CirRect *pPtCtrl_CirRect = (PtCtrl_CirRect*)pPtCtrl;
switch(pPtCtrl_CirRect->m_opt_flag)
{
case PtCtrl_CirRect_Start:
case PtCtrl_CirRect_Move:
if(pPtCtrl->m_mouse_state & PT_MOUSE_DOWN)
{
TRACE(L"PtCtrl_CirRect_OnMouseMove1\n");
pPtCtrl_CirRect->m_opt_flag = PtCtrl_CirRect_Move;
pPtCtrl_CirRect->cx = tx;
pPtCtrl_CirRect->cy = ty;
}
else
{
TRACE(L"PtCtrl_CirRect_OnMouseMove 2\n");
pPtCtrl_CirRect->m_opt_flag = PtCtrl_CirRect_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;
default:
TRACE(L"PtCtrl_CirRect_OnMouseMove 3\n");
}
return 0;
}
INT PtCtrl_CirRect_OnMouseRelease(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrlBase_OnMouseRelease(pPtCtrl);
PtCtrl_CirRect *pPtCtrl_CirRect = (PtCtrl_CirRect*)pPtCtrl;
switch(pPtCtrl_CirRect->m_opt_flag)
{
case PtCtrl_CirRect_Start:
pPtCtrl_CirRect->m_opt_flag = PtCtrl_CirRect_Nothing;
break;
case PtCtrl_CirRect_Move:
pPtCtrl_CirRect->m_opt_flag = PtCtrl_CirRect_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;
}
return 0;
}
INT PtCtrl_CirRect_OnDrawBoard(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrl_CirRect *pPtCtrl_CirRect = (PtCtrl_CirRect*)pPtCtrl;
RECT draw_rect;
INT cx,cy;
#define FIX_PIXEL 0
if(!pPtCtrl_CirRect->m_init_draw_flag)
{
pPtCtrl_CirRect->m_bak_hdc = CreateCompatibleDC(m_pt_app_info.m_pt_backup_hdc);
pPtCtrl_CirRect->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_CirRect->m_bak_hdc,pPtCtrl_CirRect->m_bak_hbmp);
pPtCtrl_CirRect->m_init_draw_flag = TRUE;
}
static int i;
switch(pPtCtrl_CirRect->m_opt_flag)
{
case PtCtrl_CirRect_Start:
TRACE(L"PtCtrl_CirRect_Start\n");
BitBlt(pPtCtrl_CirRect->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_CirRect->m_bak_rect,0,sizeof(RECT));
break;
case PtCtrl_CirRect_Move:
TRACE(L"PtCtrl_CirRect_Move %d\n",i++);
if(pPtCtrl_CirRect->m_ptctrl_base.m_cx < pPtCtrl_CirRect->cx)
{
draw_rect.left = pPtCtrl_CirRect->m_ptctrl_base.m_cx - FIX_PIXEL;
draw_rect.right = pPtCtrl_CirRect->cx + FIX_PIXEL;
}
else
{
draw_rect.right = pPtCtrl_CirRect->m_ptctrl_base.m_cx + FIX_PIXEL;
draw_rect.left = pPtCtrl_CirRect->cx - FIX_PIXEL;
}
if(pPtCtrl_CirRect->m_ptctrl_base.m_cy < pPtCtrl_CirRect->cy)
{
draw_rect.top = pPtCtrl_CirRect->m_ptctrl_base.m_cy - FIX_PIXEL;
draw_rect.bottom = pPtCtrl_CirRect->cy + FIX_PIXEL;
}
else
{
draw_rect.bottom = pPtCtrl_CirRect->m_ptctrl_base.m_cy + FIX_PIXEL;
draw_rect.top = pPtCtrl_CirRect->cy - FIX_PIXEL;
}
if(draw_rect.left < 0)
draw_rect.left = 0;
if(draw_rect.top < 0)
draw_rect.top = 0;
if(draw_rect.right >= m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth)
draw_rect.right = m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth;
if(draw_rect.bottom >= m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight)
draw_rect.bottom = m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight;
// BitBlt(m_pt_app_info.m_pt_backup_hdc,0,0,PT_PIC_SIZE_X,PT_PIC_SIZE_Y,pPtCtrl_CirRect->m_bak_hdc,0,0,SRCCOPY);
// BitBlt(pPtCtrl->m_pdc,0,0,PT_PIC_SIZE_X,PT_PIC_SIZE_Y,pPtCtrl_CirRect->m_bak_hdc,0,0,SRCCOPY);
BitBlt(m_pt_app_info.m_pt_backup_hdc,
pPtCtrl_CirRect->m_bak_rect.left,
pPtCtrl_CirRect->m_bak_rect.top,
pPtCtrl_CirRect->m_bak_rect.right - pPtCtrl_CirRect->m_bak_rect.left,
pPtCtrl_CirRect->m_bak_rect.bottom - pPtCtrl_CirRect->m_bak_rect.top,
pPtCtrl_CirRect->m_bak_hdc,
pPtCtrl_CirRect->m_bak_rect.left,
pPtCtrl_CirRect->m_bak_rect.top,
SRCCOPY);
// BitBlt(pPtCtrl->m_pdc,
// pPtCtrl_CirRect->m_bak_rect.left,
// pPtCtrl_CirRect->m_bak_rect.top,
// pPtCtrl_CirRect->m_bak_rect.right - pPtCtrl_CirRect->m_bak_rect.left,
// pPtCtrl_CirRect->m_bak_rect.bottom - pPtCtrl_CirRect->m_bak_rect.top,
// pPtCtrl_CirRect->m_bak_hdc,
// pPtCtrl_CirRect->m_bak_rect.left,
// pPtCtrl_CirRect->m_bak_rect.top,
// SRCCOPY);
// MoveToEx(m_pt_app_info.m_pt_backup_hdc,pPtCtrl_CirRect->m_ptctrl_base.m_cx,pPtCtrl_CirRect->m_ptctrl_base.m_cy,NULL);
// MoveToEx(pPtCtrl->m_pdc,pPtCtrl_CirRect->m_ptctrl_base.m_cx,pPtCtrl_CirRect->m_ptctrl_base.m_cy,NULL);
SelectObject(m_pt_app_info.m_pt_backup_hdc,pPtCtrl_CirRect->m_pen);
SelectObject(m_pt_app_info.m_pt_backup_hdc,pPtCtrl_CirRect->m_brush);
// SelectObject(pPtCtrl->m_pdc,pPtCtrl_CirRect->m_pen);
// SelectObject(pPtCtrl->m_pdc,pPtCtrl_CirRect->m_brush);
RoundRect(m_pt_app_info.m_pt_backup_hdc,
draw_rect.left, draw_rect.top,
draw_rect.right,draw_rect.bottom,
(draw_rect.right - draw_rect.left) >> 1, (draw_rect.bottom - draw_rect.top) >> 1);
// RoundRect(pPtCtrl->m_pdc,
// draw_rect.left, draw_rect.top,
// draw_rect.right,draw_rect.bottom,
RECT rt = draw_rect;
PT_SET_SMALL(rt.left,pPtCtrl_CirRect->m_bak_rect.left);
PT_SET_SMALL(rt.top,pPtCtrl_CirRect->m_bak_rect.top);
PT_SET_BIG(rt.right,pPtCtrl_CirRect->m_bak_rect.right);
PT_SET_BIG(rt.bottom,pPtCtrl_CirRect->m_bak_rect.bottom);
// (draw_rect.right - draw_rect.left) >> 1, (draw_rect.bottom - draw_rect.top) >> 1);
cx = rt.left - m_pt_app_info.m_pt_bakup_pos.x;
cx = cx << m_pt_app_info.m_pt_zoom_size;
cy = rt.top - m_pt_app_info.m_pt_bakup_pos.y;
cy = cy << m_pt_app_info.m_pt_zoom_size;
StretchBlt(pPtCtrl->m_pdc,
cx,cy,
(rt.right - rt.left)<<m_pt_app_info.m_pt_zoom_size,(rt.bottom - rt.top)<<m_pt_app_info.m_pt_zoom_size,
m_pt_app_info.m_pt_backup_hdc,
rt.left,rt.top,
(rt.right - rt.left), (rt.bottom - rt.top),
SRCCOPY);
pPtCtrl_CirRect->m_bak_rect = draw_rect;
break;
case PtCtrl_CirRect_End:
pPtCtrl_CirRect->m_ptctrl_base.m_cx = pPtCtrl_CirRect->cx;
pPtCtrl_CirRect->m_ptctrl_base.m_cy = pPtCtrl_CirRect->cy;
pPtCtrl_CirRect->m_opt_flag = PtCtrl_CirRect_Nothing;
break;
case PtCtrl_CirRect_Cancel:
BitBlt(m_pt_app_info.m_pt_backup_hdc,0,0,m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth,m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight,pPtCtrl_CirRect->m_bak_hdc,0,0,SRCCOPY);
//BitBlt(pPtCtrl->m_pdc,0,0,PT_PIC_SIZE_X,PT_PIC_SIZE_Y,pPtCtrl_Rect->m_bak_hdc,0,0,SRCCOPY);
StretchBlt(pPtCtrl->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_CirRect->m_ptctrl_base.m_cx = pPtCtrl_CirRect->cx;
pPtCtrl_CirRect->m_ptctrl_base.m_cy = pPtCtrl_CirRect->cy;
pPtCtrl_CirRect->m_opt_flag = PtCtrl_CirRect_Nothing;
default :
pPtCtrl_CirRect->m_opt_flag = PtCtrl_CirRect_Nothing;
return 1;
}
return 0;
}
INT PtCtrl_CirRect_OnDrawStyle(PtCtrlBase* pPtCtrl, INT tx /* = -1 */, INT ty /* = -1 */)
{
PtCtrl_CirRect *pPtCtrl_Brush = (PtCtrl_CirRect*)pPtCtrl;
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));
switch(tx)
{
case 0:
SelectObject(pPtCtrl->m_pdc,(HBRUSH)GetStockObject(NULL_BRUSH));
SelectObject(pPtCtrl->m_pdc,GetStockObject(BLACK_PEN));
break;
case 1:
SelectObject(pPtCtrl->m_pdc,(HBRUSH)GetStockObject(GRAY_BRUSH));
SelectObject(pPtCtrl->m_pdc,(HPEN)GetStockObject(NULL_PEN));
break;
case 2:
SelectObject(pPtCtrl->m_pdc,(HBRUSH)GetStockObject(GRAY_BRUSH));
SelectObject(pPtCtrl->m_pdc,(HPEN)GetStockObject(BLACK_PEN));
break;
}
RoundRect(pPtCtrl->m_pdc,2,2, rt.right - 2,rt.bottom - 2 ,4,4);
//Rectangle(pPtCtrl->m_pdc, 2,2, rt.right - 2 ,rt.bottom - 2);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -