⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ptctrl_eraser.cpp

📁 wince下的画图程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -