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

📄 ptctrl_plyon.cpp

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