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

📄 ptctrl_brush.cpp

📁 wince下的画图程序
💻 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 + -