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

📄 cepaint.cpp

📁 wince下的画图程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// CEPaint.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "CEPaint.h"
//#include <afxwin.h>

//////////////////////////////////////////////////////////////////////////
//Includes

#include "CEPaint.h"
#include "PtBoard.h"
#include "PtBmpFun.h"
#include "PtWinPlaceDef.h"

#include "PtCtrlBase.h"
#include "PtCtrl_Point.h"
#include "PtCtrl_Brush.h"
#include "PtCtrl_Eraser.h"
#include "PtCtrl_Zoom.h"
#include "PtCtrl_Rect.h"
#include "PtCtrl_CirRect.h"
#include "PtCtrl_Circle.h"
#include "PtCtrl_Line.h"
#include "PtCtrl_Plyon.h"
//#include "PtCtrl_Bezzer.h"
#include "PtCtrl_Frog.h"
#include "PtCtrl_GetColor.h"
#include "PtCtrl_RectRgn.h"
//#include "PtCtrl_PlyRgn.h"
#include "PtCtrl_Fill.h"
#include "PtCtrl_Text.h"

//
//////////////////////////////////////////////////////////////////////////
//Global Variables
PtAppInfo m_pt_app_info;

WNDPROC  g_sel_color_proc_ptr;

TBBUTTON toolbar_bn[3] = 
{
	{0,	IDM_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0},
	{1,	IDM_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0},
	{2,	IDM_SAVE,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0,0},
};


INT32 paint_color[PT_COLOR_COUNT] = 
{
	    RGB(0,0,0),
		
		RGB(0,0,255),
		RGB(0,255,0),
		RGB(255,0,0),
		
		RGB(0,0,127),
		RGB(0,127,0),
		RGB(127,0,0),
		
		RGB(127,127,0),
		RGB(127,0,127),
		RGB(0,127,127),
		
		RGB(255,255,0),
		RGB(255,0,255),
		RGB(0,255,255),
		
		RGB(255,255,127),
		RGB(255,127,127),
		RGB(255,255,255),
		
};
//
UINT cursor_table[16] =
{
	IDC_CURSOR_LINE,
		IDC_CURSOR_LINE,
		IDC_CURSOR_ERASER,
		IDC_CURSOR_FILL,
		IDC_CURSOR_GETCOLOR,
		IDC_CURSOR_ZOOM,
		IDC_CURSOR_POINT,
		IDC_CURSOR_POINT,
		IDC_CURSOR_FROG,
		IDC_CURSOR_LINE,
		IDC_CURSOR_LINE,
		IDC_CURSOR_LINE,
		IDC_CURSOR_LINE,
		IDC_CURSOR_LINE,
		IDC_CURSOR_LINE,
		IDC_CURSOR_LINE,
};



//////////////////////////////////////////////////////////////////////////
//define
#define MAX_LOADSTRING 100


int WINAPI WinMain(	HINSTANCE hInstance,
					HINSTANCE hPrevInstance,
					LPTSTR    lpCmdLine,
					int       nCmdShow)
{
	m_pt_app_info.m_hInst = hInstance;
	
	m_pt_app_info.m_toolbar_hbmp = LoadBitmap(hInstance, (TCHAR*)IDB_BMP_TOOLBAR);

	DialogBoxParam(hInstance,(const TCHAR*)IDD_DLG_MAIN,NULL,(DLGPROC)WndProc,0);
	
	return 0;

	
}


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc;
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	
	LRESULT ret;

	switch (message) 
	{
	
	 case WM_INITDIALOG:
		
		m_pt_app_info.m_main_win_hwnd = hWnd;
		
		GlobalInit();
		
		return FALSE;
		
	 case WM_DRAWITEM:
		 OnDrawItem((LPDRAWITEMSTRUCT)lParam);
		 break;
		 
	 case WM_COMMAND:
		 {
			 wmId    = LOWORD(wParam);
			 wmEvent = HIWORD(wParam);
			 
			 ret = OnCommand(wmId , wmEvent);
		 }
		break;
    
     case WM_HSCROLL:
		 if(m_pt_app_info.m_pt_sc_bar_x_hwnd == (HWND)lParam)
			 OnSrcollBoard(0,wParam);

	 case WM_VSCROLL:
		 if(m_pt_app_info.m_pt_sc_bar_y_hwnd == (HWND)lParam)
			 OnSrcollBoard(1,wParam);
		 break;

	 case WM_PAINT:
		 hdc = BeginPaint(hWnd, &ps);
		 
		 EndPaint(hWnd, &ps);
		 break;
		 
	 case WM_DESTROY:
		 PostQuitMessage(0);
		 break;
		 
	 case WM_KILLFOCUS:
		 m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD ;
		 break;
		 
	 case WM_SETFOCUS:
		 break;
		 
		 
	 case WM_MOUSEMOVE:
		 
		 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 ;
		 break;
		 
		 
	 default:
		 return FALSE;		 
	}
	
	return TRUE;
}

// Mesage handler for the About box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	RECT rt, rt1;
	int DlgWidth, DlgHeight;	// dialog width and height in pixel units
	int NewPosX, NewPosY;

	switch (message)
	{
		case WM_INITDIALOG:
			// trying to center the About dialog
			if (GetWindowRect(hDlg, &rt1)) {
				GetClientRect(GetParent(hDlg), &rt);
				DlgWidth	= rt1.right - rt1.left;
				DlgHeight	= rt1.bottom - rt1.top ;
				NewPosX		= (rt.right - rt.left - DlgWidth)/2;
				NewPosY		= (rt.bottom - rt.top - DlgHeight)/2;
				
				// if the About box is larger than the physical screen 
				if (NewPosX < 0) NewPosX = 0;
				if (NewPosY < 0) NewPosY = 0;
				SetWindowPos(hDlg, 0, NewPosX, NewPosY,
					0, 0, SWP_NOZORDER | SWP_NOSIZE);
			}
			return TRUE;

		case WM_COMMAND:
			if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL))
			{
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}
			break;
	}
    return FALSE;
}

//////////////////////////////////////////////////////////////////////////
//
INT GlobalInit()
{
	//dbg_out(L"GlobalInit\n");
	
//////////////////////////////////////////////////////////////////////////
//init window handle
	//m_pt_app_info.m_toolbar_hwnd = CreateToolbarEx(m_pt_app_info.m_main_win_hwnd,WS_CHILD|WS_VISIBLE|TBSTYLE_FLAT,IDR_MAINFRAME,3,NULL,(UINT)m_pt_app_info.m_toolbar_hbmp,toolbar_bn,3,16,14,16,14,sizeof(TBBUTTON));
	
	m_pt_app_info.m_pt_board_hwnd = GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_BOARD);
    m_pt_app_info.m_pt_sc_bar_x_hwnd = GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SCROLL_BAR_X);
	m_pt_app_info.m_pt_sc_bar_y_hwnd = GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SCROLL_BAR_Y);

	int i ;
	for( i = 0 ; i < PT_CTRL_COUNT; i ++)
	{
		m_pt_app_info.m_pt_ctrl_bn_hwnd[i] =  GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_BN_PT_PLYRGN + i);
		
		if(m_pt_app_info.m_pt_ctrl_bn_hwnd[i] != NULL)
		{
			m_pt_app_info.m_pt_ctrl_hbmp[i] = LoadBitmap(m_pt_app_info.m_hInst,(TCHAR*)(IDB_PT_PLYRGN + i));
			//SendMessage(m_pt_app_info.m_pt_ctrl_bn_hwnd[i],BM_SETIMAGE,IMAGE_BITMAP,(LONG)m_pt_app_info.m_pt_ctrl_hbmp[i]);
		}
		
	}

    
	for( i = 0 ; i < 3; i ++)
		m_pt_app_info.m_pt_style_bn_hwnd[i] =  GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_BN_PT_STYLE1 + i);
	
    m_pt_app_info.m_color_cur_bn_hwnd = GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_BN_COLOR_CUR);
	
	for( i = 0 ; i < PT_COLOR_COUNT; i ++)
	{
		m_pt_app_info.m_color_sel_bn_hwnd[i] = GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_BN_COLOR_SEL1 + i);
	    g_sel_color_proc_ptr = (PtBoard_Proc_Ptr)SetWindowLong(m_pt_app_info.m_color_sel_bn_hwnd[i],GWL_WNDPROC,(LONG)PtColor_Sel_Proc);
		
// 		WNDCLASS wcs;
// 		GetClassInfo(m_pt_app_info.m_hInst,L"Static",&wcs);
// 		//g_sel_color_proc_ptr = GetClassLong(m_pt_app_info.m_color_sel_bn_hwnd[i],GCL_STYLE);
// 		g_sel_color_proc_ptr = wcs.lpfnWndProc;
		
	}

	
////////////////////////////////////////////////////////////////////////////
// init paint control
	memset(m_pt_app_info.m_PtCtrl_Table,0,sizeof(m_pt_app_info.m_PtCtrl_Table));

 	InitPbCtrl_Point(&g_ptctl_point);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_POINT - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_point;
// 	
 	InitPbCtrl_Brush(&g_ptctl_brush);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_BRUSH - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_brush;
// 
 	InitPbCtrl_Line(&g_ptctl_line);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_LINE - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_line;
// 
 	InitPbCtrl_Rect(&g_ptctl_rect);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_RECT - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_rect;
// 
 	InitPbCtrl_CirRect(&g_ptctl_cirrect);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_CIRRECT - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_cirrect;
// 
 	InitPbCtrl_Circle(&g_ptctl_circle);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_CIRCLE - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_circle;
// 
 	InitPbCtrl_Plyon(&g_ptctl_plyon);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_POLY - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_plyon;
// 
// 	InitPbCtrl_Bezzer(&g_ptctl_bezzer);
// 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_BIZZER - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_bezzer;
// 
 	InitPbCtrl_Eraser(&g_ptctl_eraser);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_ERASER - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_eraser;
// 	
 	InitPbCtrl_Frog(&g_ptctl_frog);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_FROG - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_frog;
// 
 	InitPbCtrl_GetColor(&g_ptctl_getcolor);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_GETCOLOR - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_getcolor;
// 
 	InitPbCtrl_RectRgn(&g_ptctl_rectrgn);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_RECTRGN - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_rectrgn;
// 
// 	InitPbCtrl_PlyRgn(&g_ptctl_plyrgn);
// 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_PLYRGN - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_plyrgn;
// 
 	InitPbCtrl_Text(&g_ptctl_text);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_TEXT - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_text;
// 
 	InitPbCtrl_Fill(&g_ptctl_fill);
	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_FILL - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_fill;
    
	InitPbCtrl_Zoom(&g_ptctl_zoom);
 	m_pt_app_info.m_PtCtrl_Table[IDC_BN_PT_ZOOM - IDC_BN_PT_PLYRGN] = (PtCtrlBase*)&g_ptctl_zoom;
    
	for( i = 0 ; i < PT_CTRL_COUNT; i ++)
	{
        if(m_pt_app_info.m_PtCtrl_Table[i] != NULL)
			m_pt_app_info.m_PtCtrl_Table[i]->PtCtrl_Init(m_pt_app_info.m_PtCtrl_Table[i]);
		
		m_pt_app_info.m_pt_ctrl_hcursor[i] = LoadCursor(m_pt_app_info.m_hInst,(TCHAR*)cursor_table[i]);
		
	}
	
//////////////////////////////////////////////////////////////////////////
//init style color
	
	//m_pt_app_info.m_pt_style_idx = 0;
	m_pt_app_info.m_color_cur = 0;
	m_pt_app_info.m_color_bk_cur = RGB(255,255,255);

//////////////////////////////////////////////////////////////////////////
//init file 
	m_pt_app_info.m_bmp_bits_ptr = gBmp_Bits;
	
	BOOLEAN load_file_flag = FALSE;
    
  	INT slen = wcslen(GetCommandLine());
  	TCHAR* sp = GetCommandLine();
  	
  	while (*sp != L' ' && *sp ) sp ++ ;
	
	if(1)//*sp == L' ')
  	{
		load_file_flag = TRUE;
		//wcsncpy(m_pt_app_info.m_file_name,sp + 1 , sp - GetCommandLine());
		wcscpy(m_pt_app_info.m_file_name,L"ASUKA.BMP");
	}
	else
  		memset(m_pt_app_info.m_file_name,0,sizeof(m_pt_app_info.m_file_name));
 	
	//wcscpy(m_pt_app_info.m_file_name,L"ASUKA.BMP");

	if(load_file_flag)
	{
		INT ret = LoadBmpFromFile(m_pt_app_info.m_file_name);
		
		if(ret)
		{
			wsprintf(m_pt_app_info.m_file_name, L"File Error! Code = %d",ret);
			MessageBox(m_pt_app_info.m_main_win_hwnd,m_pt_app_info.m_file_name,0,0);
			memset(m_pt_app_info.m_file_name,0,sizeof(m_pt_app_info.m_file_name));
	       
			load_file_flag = FALSE;
		}
	}
	
	if(!load_file_flag)
		CreateDefBmpHeader(); 
    

//////////////////////////////////////////////////////////////////////////
//init paint board

	//UpdateWindowPlace();

	SetWindowPlace();
	
	InitPtBoard();

	AdjustScrollBar();
//////////////////////////////////////////////////////////////////////////
//setdefalut
  	m_pt_app_info.m_PtCtrl_Idx = IDC_BN_PT_POINT - IDC_BN_PT_PLYRGN;
  	m_pt_app_info.m_PtCtrl_Idx_Prev = IDC_BN_PT_POINT - IDC_BN_PT_PLYRGN;
 	
//   	m_pt_app_info.m_PtCtrl_Idx = IDC_BN_PT_ZOOM - IDC_BN_PT_PLYRGN;
//  	m_pt_app_info.m_PtCtrl_Idx_Prev = IDC_BN_PT_ZOOM - IDC_BN_PT_PLYRGN;

	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_OnPaintStart(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]);
	
	return 0;
}




INT OnDrawItem(LPDRAWITEMSTRUCT lp)
{
		
	LPDRAWITEMSTRUCT pdis = lp;
	HBRUSH hbrush = NULL;
	HPEN   hpen = NULL;
	HDC    thdc;
	

	switch(pdis->CtlID)
	{
	
	case IDC_BN_PT_PLYRGN:
	case IDC_BN_PT_RECTRGN :
	case IDC_BN_PT_ERASER:
	case IDC_BN_PT_FILL:
	case IDC_BN_PT_GETCOLOR:
	case IDC_BN_PT_ZOOM:
	case IDC_BN_PT_POINT:
	case IDC_BN_PT_BRUSH:
	case IDC_BN_PT_FROG:
	case IDC_BN_PT_TEXT:
	case IDC_BN_PT_LINE:
	case IDC_BN_PT_BIZZER:
	case IDC_BN_PT_RECT:
	case IDC_BN_PT_POLY:
	case IDC_BN_PT_CIRCLE:
	case IDC_BN_PT_CIRRECT:
		
		 hbrush = CreatePatternBrush(m_pt_app_info.m_pt_ctrl_hbmp[pdis->CtlID - IDC_BN_PT_PLYRGN]);
		 
		 thdc = CreateCompatibleDC(pdis->hDC);
		 
		 SelectObject(thdc,m_pt_app_info.m_pt_ctrl_hbmp[pdis->CtlID - IDC_BN_PT_PLYRGN]);
		 SelectObject(thdc,hbrush);

		 PatBlt(thdc,0,0,14,14,PATCOPY);

		 if(m_pt_app_info.m_pt_ctrl_bn_hwnd[m_pt_app_info.m_PtCtrl_Idx] == pdis->hwndItem) 
		    FillRect(pdis->hDC,&(pdis->rcItem),(HBRUSH)GetStockObject(LTGRAY_BRUSH));
		 else
			FillRect(pdis->hDC,&(pdis->rcItem),(HBRUSH)GetStockObject(GRAY_BRUSH));

		 StretchBlt(pdis->hDC,2,2,pdis->rcItem.right - 1, pdis->rcItem.bottom - 1,thdc,0,0,14,14,SRCAND);


		 DeleteObject(hbrush);
		 DeleteDC(thdc);



		break;

	case IDC_BN_COLOR_CUR:
		
		hbrush = CreateSolidBrush(m_pt_app_info.m_color_bk_cur);
		
		hpen = CreatePen(PS_SOLID,2,RGB(127,127,127));
		
		SelectObject(pdis->hDC,hbrush);
        SelectObject(pdis->hDC,hpen); 
		
		Rectangle(pdis->hDC,
			pdis->rcItem.left + (pdis->rcItem.right >> 2),pdis->rcItem.top + (pdis->rcItem.bottom >> 2),
			pdis->rcItem.right,pdis->rcItem.bottom);

		DeleteObject(hbrush);

		
        hbrush = CreateSolidBrush(m_pt_app_info.m_color_cur);
		SelectObject(pdis->hDC,hbrush);

		Rectangle(pdis->hDC,
			pdis->rcItem.left,pdis->rcItem.top,
			pdis->rcItem.right - (pdis->rcItem.right >> 2),pdis->rcItem.bottom - (pdis->rcItem.bottom >> 2));

		SelectObject(pdis->hDC,GetStockObject(WHITE_BRUSH));

⌨️ 快捷键说明

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