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

📄 ptboard.cpp

📁 wince下的画图程序
💻 CPP
字号:
#include "StdAfx.h"
#include <afx.h>

#include "PtBoard.h"
#include "CEPaint.h"

#include "PtBmpFun.h"

PtBoard_Proc_Ptr gPtBoard_Proc;

BOOLEAN g_mouse_flag = FALSE;

HDC g_board_buf_hdc = NULL;
HBITMAP g_board_buf_hbmp = NULL;

INT InitPtBoard()
{
	
	TRACE(TEXT("InitPtBoard\n"));
    gPtBoard_Proc = (PtBoard_Proc_Ptr)SetWindowLong(m_pt_app_info.m_pt_board_hwnd,GWL_WNDPROC,(LONG)PtBoard_Proc);
	
	GetClientRect(m_pt_app_info.m_pt_board_hwnd,&m_pt_app_info.m_pt_board_rect);
    m_pt_app_info.m_pt_draw_rect = m_pt_app_info.m_pt_board_rect;
	
	PT_SET_SMALL(m_pt_app_info.m_pt_draw_rect.right,m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth);
	PT_SET_SMALL(m_pt_app_info.m_pt_draw_rect.bottom,m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight);

	m_pt_app_info.m_pt_backup_hdc = NULL;
	m_pt_app_info.m_pt_backup_hbmp = NULL;

	m_pt_app_info.m_pt_board_flag = 0;
	m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RESET;
	m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_INIT_BAKUP_DC;
    
	if(m_pt_app_info.m_file_name[0])
       m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_LOADFILE;

	
	m_pt_app_info.m_pt_zoom_size = 0;
    m_pt_app_info.m_pt_bakup_pos.x = 0;
	m_pt_app_info.m_pt_bakup_pos.y = 0;
	

	m_pt_app_info.m_pt_backup_rect.left = 0;
	m_pt_app_info.m_pt_backup_rect.top = 0;
	m_pt_app_info.m_pt_backup_rect.right = m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth;
	m_pt_app_info.m_pt_backup_rect.bottom = m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight;

	return 0;
}


LRESULT CALLBACK PtBoard_Proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	//INT result = 0;
	HRGN board_rgn; 

	INT mx,my;
	
    switch(message)
	{
	
	case WM_SETFOCUS:
		TRACE(TEXT("PtBoard WM_SETFOCUS\n"));
		break;

	case WM_KILLFOCUS:
		TRACE(TEXT("PtBoard WM_KILLFOCUS\n"));
		m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
		break;

	case WM_LBUTTONDOWN:
		TRACE(TEXT("PtBoard WM_LBUTTONDOWN\n"));
 		if(!g_mouse_flag)
 		{
			TRACE(TEXT("PtBoard captrue start\n"));

 			SetCapture(m_pt_app_info.m_pt_board_hwnd);
 			g_mouse_flag = TRUE;
 		}
		mx = LOWORD(lParam);
		my = HIWORD(lParam);

		mx >>= m_pt_app_info.m_pt_zoom_size;
		mx += m_pt_app_info.m_pt_bakup_pos.x;
        
		my >>= m_pt_app_info.m_pt_zoom_size;
		my += m_pt_app_info.m_pt_bakup_pos.y;
        
		if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
			m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnMouseDown(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],mx,my);
		
		//SetFocus(hWnd);
		
		break;
	
    case WM_MOUSEMOVE:
		
		if(LOWORD(lParam) > m_pt_app_info.m_pt_draw_rect.right || HIWORD(lParam) > m_pt_app_info.m_pt_draw_rect.bottom)
		{
 			if(g_mouse_flag)
 			{
				TRACE(TEXT("PtBoard captrue out\n"));
 				
				ReleaseCapture();
 				g_mouse_flag = FALSE;
 			}

			if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
				m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->m_mouse_state = 0;
		}
		else
		{
			mx = LOWORD(lParam);
			my = HIWORD(lParam);
			
			mx >>= m_pt_app_info.m_pt_zoom_size;
			mx += m_pt_app_info.m_pt_bakup_pos.x;
			
			my >>= m_pt_app_info.m_pt_zoom_size;
			my += m_pt_app_info.m_pt_bakup_pos.y;

			if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
				m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnMouseMove(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],mx,my);
		}
		break;
    
    case WM_LBUTTONUP:
 		if(g_mouse_flag)
 		{
			TRACE(TEXT("PtBoard captrue end\n"));

 			ReleaseCapture();
 			g_mouse_flag = FALSE;
 		}

		mx = LOWORD(lParam);
		my = HIWORD(lParam);
		
		mx >>= m_pt_app_info.m_pt_zoom_size;
		mx += m_pt_app_info.m_pt_bakup_pos.x;
		
		my >>= m_pt_app_info.m_pt_zoom_size;
		my += m_pt_app_info.m_pt_bakup_pos.y;

		
		if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
			m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnMouseRelease(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],mx,my);

		break;

	case WM_RBUTTONDOWN:
        
		mx = LOWORD(lParam);
		my = HIWORD(lParam);
		
		mx >>= m_pt_app_info.m_pt_zoom_size;
		mx += m_pt_app_info.m_pt_bakup_pos.x;
		
		my >>= m_pt_app_info.m_pt_zoom_size;
		my += m_pt_app_info.m_pt_bakup_pos.y;

		if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
		{
			if(
				m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->m_ctrl_id == PtCtrlType_GetColor ||
				m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->m_ctrl_id == PtCtrlType_Fill
			   )
				m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnMouseDown(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],- mx, - my);
		}
		
		break;
	
	case WM_PAINT:
	
		hdc = BeginPaint(hWnd, &ps);
	    
		TRACE(L"PtBoard paint rect = %ld ,%ld, %ld, %ld\n",ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right,ps.rcPaint.bottom);
		
		if(m_pt_app_info.m_pt_board_flag & PT_BOARD_FLAG_INIT_BAKUP_DC)
		{
			m_pt_app_info.m_pt_backup_hdc = CreateCompatibleDC(hdc);
			
			//m_pt_app_info.m_pt_backup_hbmp = CreateCompatibleBitmap(hdc,PT_PIC_MAX_SIZE_X,PT_PIC_MAX_SIZE_Y);
			m_pt_app_info.m_pt_backup_hbmp = CreateCompatibleBitmap(hdc,m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth,m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight);
			
			SelectObject(m_pt_app_info.m_pt_backup_hdc,m_pt_app_info.m_pt_backup_hbmp);
			
			
			g_board_buf_hdc = CreateCompatibleDC(hdc);
			
			g_board_buf_hbmp = CreateCompatibleBitmap(hdc,m_pt_app_info.m_pt_board_rect.right,m_pt_app_info.m_pt_board_rect.bottom);
			
			SelectObject(g_board_buf_hdc,g_board_buf_hbmp);

			
			m_pt_app_info.m_pt_board_flag &= ~PT_BOARD_FLAG_INIT_BAKUP_DC;
		}
//      board_rgn = CreateRectRgn(0,0,ps.rcPaint.right,ps.rcPaint.bottom);
// 		SelectClipRgn(hdc, board_rgn);
// 		DeleteObject(board_rgn); 
		if(m_pt_app_info.m_pt_board_flag & PT_BOARD_FLAG_RELOAD || !CheckFocus())
   		{
			TRACE(TEXT("PtBoard paint reload\n"));
			//FillRect(hdc,&m_pt_app_info.m_pt_board_rect,(HBRUSH)GetStockObject(GRAY_BRUSH));
			FillRect(g_board_buf_hdc,&m_pt_app_info.m_pt_board_rect,(HBRUSH)GetStockObject(GRAY_BRUSH));

			INT i = StretchBlt(g_board_buf_hdc,
				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);

 			i = BitBlt(hdc,
 				0,0,
 				m_pt_app_info.m_pt_board_rect.right,m_pt_app_info.m_pt_board_rect.bottom,
 				g_board_buf_hdc,
 				0,0,
				SRCCOPY);

			m_pt_app_info.m_pt_board_flag &= ~PT_BOARD_FLAG_RELOAD;
  
		}
 
  		if(m_pt_app_info.m_pt_board_flag & PT_BOARD_FLAG_RESET )
  		{
			TRACE(TEXT("PtBoard paint reset\n"));

  			HBRUSH hbrush = CreateSolidBrush(m_pt_app_info.m_color_bk_cur);

			FillRect(hdc,&m_pt_app_info.m_pt_board_rect,(HBRUSH)GetStockObject(GRAY_BRUSH));

			//FillRect(hdc,&ps.rcPaint,hbrush);
			FillRect(hdc,&m_pt_app_info.m_pt_draw_rect,hbrush);
			
            FillRect(m_pt_app_info.m_pt_backup_hdc,&m_pt_app_info.m_pt_backup_rect,hbrush);
  			
			DeleteObject(hbrush);

  			m_pt_app_info.m_pt_board_flag &= ~PT_BOARD_FLAG_RESET;
  		}
 		
 		if(m_pt_app_info.m_pt_board_flag & PT_BOARD_FLAG_LOADFILE)
 		{
			TRACE(TEXT("PtBoard paint loadfile\n"));
            
			LoadBmpToDC(m_pt_app_info.m_pt_backup_hdc);
            	
			INT i = StretchBlt(hdc,
				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);
 			
 			m_pt_app_info.m_pt_board_flag &= ~PT_BOARD_FLAG_LOADFILE;
 		}
		
		if(m_pt_app_info.m_pt_board_flag & PT_BOARD_FLAG_PTCTRL)
		{
			TRACE(TEXT("PtBoard paint pt ctrl\n"));

			board_rgn = CreateRectRgn(0,0,m_pt_app_info.m_pt_draw_rect.right,m_pt_app_info.m_pt_draw_rect.bottom);
			SelectClipRgn(hdc, board_rgn);
			DeleteObject(board_rgn);

			board_rgn = CreateRectRgn(0,0,m_pt_app_info.m_pt_backup_rect.right,m_pt_app_info.m_pt_backup_rect.bottom);
			SelectClipRgn(m_pt_app_info.m_pt_backup_hdc, board_rgn);
            DeleteObject(board_rgn);

			if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx_Prev] != NULL)
			{
				if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx_Prev]->m_last_draw_flag)
				{
					m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx_Prev]->m_pdc = hdc;
					m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx_Prev]->PtCtrl_OnDrawBoard(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx_Prev]);
				}
			}
			
			if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
			{
				m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->m_pdc = hdc;
				m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnDrawBoard(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]);
			}
	      
			m_pt_app_info.m_pt_board_flag &= ~PT_BOARD_FLAG_PTCTRL;
		}
		EndPaint(hWnd, &ps);
        
		break;
	
			
    default:
		return DefWindowProc(hWnd,message,wParam,lParam);;
		//return gPtBoard_Proc(hWnd,message,wParam,lParam);
	}
	
	return TRUE;
	//return DefWindowProc(hWnd,message,wParam,lParam);
}


INT CheckFocus()
{

	if(m_pt_app_info.m_main_win_hwnd == GetForegroundWindow())
	{
		return TRUE;
	}
	
	return  FALSE;
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -