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

📄 cepaint.cpp

📁 wince下的画图程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		SelectObject(pdis->hDC,GetStockObject(WHITE_PEN));
		
		DeleteObject(hbrush);
		DeleteObject(hpen);


		break;

    case IDC_BN_COLOR_SEL1:
	case IDC_BN_COLOR_SEL2:
	case IDC_BN_COLOR_SEL3:
	case IDC_BN_COLOR_SEL4:
	case IDC_BN_COLOR_SEL5:
	case IDC_BN_COLOR_SEL6:
	case IDC_BN_COLOR_SEL7:
	case IDC_BN_COLOR_SEL8:
	case IDC_BN_COLOR_SEL9:
	case IDC_BN_COLOR_SEL10:
	case IDC_BN_COLOR_SEL11:
	case IDC_BN_COLOR_SEL12:
	case IDC_BN_COLOR_SEL13:
	case IDC_BN_COLOR_SEL14:
	case IDC_BN_COLOR_SEL15:
	case IDC_BN_COLOR_SEL16:
		
        hbrush = CreateSolidBrush(paint_color[pdis->CtlID - IDC_BN_COLOR_SEL1]);
		
		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.top,pdis->rcItem.right,pdis->rcItem.bottom);
		
		
		SelectObject(pdis->hDC,GetStockObject(WHITE_BRUSH));
		SelectObject(pdis->hDC,GetStockObject(WHITE_PEN));
		
		DeleteObject(hbrush);
		DeleteObject(hpen);

		
		break;
	
    case IDC_BN_PT_STYLE1:
	case IDC_BN_PT_STYLE2:
	case IDC_BN_PT_STYLE3:
		
		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 = pdis->hDC ;
		    m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnDrawStyle(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],pdis->CtlID - IDC_BN_PT_STYLE1);
		}
		
		break;

	case IDC_SC_BOARD:
		
		break;

	}
	
	return 0;
}


INT OnCommand(UINT CTRL_ID, UINT MSG_ID)
{
	RECT rt;

	switch (CTRL_ID)
	{		
	case IDM_HELP_ABOUT:
		DialogBox(m_pt_app_info.m_hInst, (LPCTSTR)IDD_ABOUTBOX, m_pt_app_info.m_main_win_hwnd, (DLGPROC)About);
		break;
		
	case IDCANCEL:
		EndDialog(m_pt_app_info.m_main_win_hwnd,0);
		return FALSE;
		//PostQuitMessage(0);
		//AfxEndThread(0);
		//break;
	
    case IDM_SAVE:
// 		SaveBmpFromDC(m_pt_app_info.m_pt_backup_hdc);
// 		SaveBmpToFile("test.bmp");
		
		//GetOpenFileName();
		break;

    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   :

		//dbg_out(L"bn command\n");

		if(m_pt_app_info.m_PtCtrl_Table[CTRL_ID - IDC_BN_PT_PLYRGN] == NULL)
			break;

		m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnPaintEnd(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]);
		
		m_pt_app_info.m_PtCtrl_Idx_Prev = m_pt_app_info.m_PtCtrl_Idx;
		m_pt_app_info.m_PtCtrl_Idx = CTRL_ID - IDC_BN_PT_PLYRGN;
   
		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]);

		
		//InvalidateRect(m_pt_app_info.m_main_win_hwnd,&rt,FALSE);
		

		GetWindowRect(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_CTRL),&rt);
		//GetWindowRect(m_pt_app_info.m_main_win_hwnd,&rt);
		//m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
		
		RedrawWindow(m_pt_app_info.m_main_win_hwnd,&rt,NULL,RDW_INVALIDATE);

		//InvalidateRect(m_pt_app_info.m_main_win_hwnd,NULL,FALSE);

		break;

	case IDC_BN_PT_STYLE1:
	case IDC_BN_PT_STYLE2:
	case IDC_BN_PT_STYLE3:
		
		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_OnStyleChange(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],CTRL_ID - IDC_BN_PT_STYLE1);

		//InvalidateRect(m_pt_app_info.m_main_win_hwnd,NULL,FALSE);
		
		GetWindowRect(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_CTRL),&rt);
		RedrawWindow(m_pt_app_info.m_main_win_hwnd,&rt,NULL,RDW_INVALIDATE);

		break;
	
	case IDC_BN_COLOR_SEL1:
	case IDC_BN_COLOR_SEL2:
	case IDC_BN_COLOR_SEL3:
	case IDC_BN_COLOR_SEL4:
	case IDC_BN_COLOR_SEL5:
	case IDC_BN_COLOR_SEL6:
	case IDC_BN_COLOR_SEL7:
	case IDC_BN_COLOR_SEL8:
	case IDC_BN_COLOR_SEL9:
	case IDC_BN_COLOR_SEL10:
	case IDC_BN_COLOR_SEL11:
	case IDC_BN_COLOR_SEL12: 
	case IDC_BN_COLOR_SEL13:
	case IDC_BN_COLOR_SEL14:
	case IDC_BN_COLOR_SEL15:
	case IDC_BN_COLOR_SEL16:
		
		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_OnColorChange(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],paint_color[CTRL_ID - IDC_BN_COLOR_SEL1],MSG_ID);

		
		GetWindowRect(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_COLOR),&rt);
		RedrawWindow(m_pt_app_info.m_main_win_hwnd,&rt,NULL,RDW_INVALIDATE);
		//InvalidateRect(m_pt_app_info.m_main_win_hwnd,&rt,FALSE);

		break;
		
	default:
		return FALSE; //return DefWindowProc(hWnd, message, wParam, lParam);
	}

	return TRUE;
}


INT SetWindowPlace()
{
    TCHAR ch[512];

	INT scr_x = GetSystemMetrics(SM_CXSCREEN);
	INT scr_y = GetSystemMetrics(SM_CYSCREEN) - 25;

    INT loop = 0;

	float radio_x = (float)scr_x / (float)gPlaceInfo_main_win.wid;
	float radio_y = (float)scr_y / (float)gPlaceInfo_main_win.hei;

	gPlaceInfo_main_win.wid = scr_x;
	gPlaceInfo_main_win.hei = scr_y;

	ZoomPlace(&gPlaceInfo_board,radio_x,radio_y);
	swprintf(ch,L"place board, x = %d, y = %d\n",gPlaceInfo_board.cx,gPlaceInfo_board.cy);
	//dbg_out(ch);

	
 	for(loop = 0 ; loop < PT_CTRL_COUNT; loop++)
 	{
 		ZoomPlace(&gPlaceInfo_ptctrl[loop],radio_x,radio_y);
// 		swprintf(ch,L"place %d , x = %d, y = %d\n",loop , gPlaceInfo_ptctrl[loop].cx,gPlaceInfo_ptctrl[loop].cy);
// 		dbg_out(ch);
 	}

	for(loop = 0 ; loop < 3; loop++)
	{
		ZoomPlace(&gPlaceInfo_ptsytle[loop],radio_x,radio_y);
	}

 	for(loop = 0 ; loop < PT_COLOR_COUNT; loop++)
 	{
 		ZoomPlace(&gPlaceInfo_ptcolor[loop],radio_x,radio_y);
 	}

 	ZoomPlace(&gPlaceInfo_ptcolor_cur,radio_x,radio_y);
 	
 	ZoomPlace(&gPlaceInfo_scrbar_x,radio_x,radio_y);
 	
 	ZoomPlace(&gPlaceInfo_scrbar_y,radio_x,radio_y);
 
 	for(loop = 0 ; loop < 3; loop++)
 	{
 		ZoomPlace(&gPlaceInfo_groupbox[loop],radio_x,radio_y);
 	}


//////////////////////////////////////////////////////////////////////////
    
	SetPlace(m_pt_app_info.m_main_win_hwnd,&gPlaceInfo_main_win); 
	SetPlace(m_pt_app_info.m_pt_board_hwnd,&gPlaceInfo_board);

 	for(loop = 0 ; loop < PT_CTRL_COUNT; loop++)
 		SetPlace(m_pt_app_info.m_pt_ctrl_bn_hwnd[loop],&gPlaceInfo_ptctrl[loop]);
 
 	for(loop = 0 ; loop < 3; loop++)
 		SetPlace(m_pt_app_info.m_pt_style_bn_hwnd[loop],&gPlaceInfo_ptsytle[loop]);
 
 	for(loop = 0 ; loop < PT_COLOR_COUNT; loop++)
 		SetPlace(m_pt_app_info.m_color_sel_bn_hwnd[loop],&gPlaceInfo_ptcolor[loop]);
 
 	SetPlace(m_pt_app_info.m_color_cur_bn_hwnd,&gPlaceInfo_ptcolor_cur);
     
 	SetPlace(m_pt_app_info.m_pt_sc_bar_x_hwnd,&gPlaceInfo_scrbar_x);
	swprintf(ch,L"place sc_bar_x, x = %d, y = %d\n",gPlaceInfo_scrbar_x.cx,gPlaceInfo_scrbar_x.cy);
	//dbg_out(ch);

 	SetPlace(m_pt_app_info.m_pt_sc_bar_y_hwnd,&gPlaceInfo_scrbar_y);
 
    SetPlace(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_CTRL),&gPlaceInfo_groupbox[0]);
    SetPlace(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_STYLE),&gPlaceInfo_groupbox[1]);
 	SetPlace(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_COLOR),&gPlaceInfo_groupbox[2]);
 			
	
	return 0;
}

INT AdjustScrollBar()
{
    if((m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth << m_pt_app_info.m_pt_zoom_size) > m_pt_app_info.m_pt_draw_rect.right)
	{
		SetScrollRange(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,0,(m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth << m_pt_app_info.m_pt_zoom_size) / (m_pt_app_info.m_pt_draw_rect.right>>1), FALSE);
	    SetScrollPos(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,0,TRUE);
		SetWindowLong(m_pt_app_info.m_pt_sc_bar_x_hwnd,GWL_STYLE,GetWindowLong(m_pt_app_info.m_pt_sc_bar_x_hwnd,GWL_STYLE) & ~WS_DISABLED);

	}
	else
	{
		SetScrollPos(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,0,TRUE);
		SetWindowLong(m_pt_app_info.m_pt_sc_bar_x_hwnd,GWL_STYLE,GetWindowLong(m_pt_app_info.m_pt_sc_bar_x_hwnd,GWL_STYLE)|WS_DISABLED);
	}

	if((m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight << m_pt_app_info.m_pt_zoom_size)> m_pt_app_info.m_pt_draw_rect.bottom)
	{
		SetScrollRange(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,0,(m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight << m_pt_app_info.m_pt_zoom_size)/(m_pt_app_info.m_pt_draw_rect.bottom >>1), FALSE);
		SetScrollPos(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,0,TRUE);
		SetWindowLong(m_pt_app_info.m_pt_sc_bar_y_hwnd,GWL_STYLE,GetWindowLong(m_pt_app_info.m_pt_sc_bar_y_hwnd,GWL_STYLE) & ~WS_DISABLED);
	}
	else
	{
		SetScrollPos(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,0,FALSE);
		SetWindowLong(m_pt_app_info.m_pt_sc_bar_y_hwnd,GWL_STYLE,GetWindowLong(m_pt_app_info.m_pt_sc_bar_y_hwnd,GWL_STYLE)|WS_DISABLED);
	}


	return 0;
}
INT OnSrcollBoard(INT scroll_flag, WPARAM para)
{
	UINT sc_type = LOWORD(para);
	UINT sc_value = HIWORD(para);
    INT  sc_range = 0;
	INT  sc_pos;
	INT  sc_min,sc_max;
	float radix;
    
	SCROLLINFO sc_info;
	sc_info.cbSize = sizeof(SCROLLINFO);

	switch(sc_type)
	{
	case SB_RIGHT:
    case SB_LINERIGHT:
    case SB_PAGERIGHT:
		if(scroll_flag == 0)
		{
			sc_info.fMask = SIF_RANGE;
            GetScrollInfo(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,&sc_info);
            sc_range = sc_info.nMax - sc_info.nMin;
            
			sc_info.fMask = SIF_POS;
            GetScrollInfo(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,&sc_info);
			sc_pos = sc_info.nPos;
			
			sc_pos ++;
            
			sc_value = m_pt_app_info.m_pt_draw_rect.right >> m_pt_app_info.m_pt_zoom_size;

			m_pt_app_info.m_pt_bakup_pos.x += sc_value >> 1;

 			if((m_pt_app_info.m_pt_bakup_pos.x + sc_value ) > m_pt_app_info.m_pt_backup_rect.right)
			{
 				m_pt_app_info.m_pt_bakup_pos.x = m_pt_app_info.m_pt_backup_rect.right - sc_value;
			    sc_pos = sc_range;
			}

            SetScrollPos(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,sc_pos,TRUE); 
			
			m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
		}
		else
		{
			sc_info.fMask = SIF_RANGE;
            GetScrollInfo(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,&sc_info);
            sc_range = sc_info.nMax - sc_info.nMin;
            
			sc_info.fMask = SIF_POS;
            GetScrollInfo(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,&sc_info);
			sc_pos = sc_info.nPos;
			
			sc_pos ++;
            
			sc_value = m_pt_app_info.m_pt_draw_rect.bottom >> m_pt_app_info.m_pt_zoom_size;

			m_pt_app_info.m_pt_bakup_pos.y += sc_value >> 1;
			
			if((m_pt_app_info.m_pt_bakup_pos.y + sc_value) > m_pt_app_info.m_pt_backup_rect.bottom)
			{
				m_pt_app_info.m_pt_bakup_pos.y = m_pt_app_info.m_pt_backup_rect.bottom - sc_value;
				sc_pos = sc_range;
			}
			
            SetScrollPos(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,sc_pos,TRUE);
			
			m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;

		}
		
		InvalidateRect(m_pt_app_info.m_pt_board_hwnd,&m_pt_app_info.m_pt_board_rect,FALSE);
		break;

    case SB_LEFT:
    case SB_LINELEFT:
    case SB_PAGELEFT:
		if(scroll_flag == 0)
		{
			sc_info.fMask = SIF_RANGE;
            GetScrollInfo(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,&sc_info);
            sc_range = sc_info.nMax - sc_info.nMin;
            
			sc_info.fMask = SIF_POS;
            GetScrollInfo(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,&sc_info);
			sc_pos = sc_info.nPos;
			
			sc_pos --;
			
			sc_value = m_pt_app_info.m_pt_draw_rect.right >> m_pt_app_info.m_pt_zoom_size;

			m_pt_app_info.m_pt_bakup_pos.x -= sc_value >> 1;
			
			if(m_pt_app_info.m_pt_bakup_pos.x < 0)
			{
				m_pt_app_info.m_pt_bakup_pos.x = 0;
				sc_pos = 0;
			}
			
            SetScrollPos(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,sc_pos,TRUE); 
			
			m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
		}
		else
		{
			sc_info.fMask = SIF_RANGE;
            GetScrollInfo(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,&sc_info);
            sc_range = sc_info.nMax - sc_info.nMin;
            
			sc_info.fMask = SIF_POS;
            GetScrollInfo(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,&sc_info);
			sc_pos = sc_info.nPos;
			
			sc_pos --;
            
			
			sc_value = m_pt_app_info.m_pt_draw_rect.bottom >> m_pt_app_info.m_pt_zoom_size;

			m_pt_app_info.m_pt_bakup_pos.y -= sc_value >> 1;
			
			if(m_pt_app_info.m_pt_bakup_pos.y < 0)
			{
				m_pt_app_info.m_pt_bakup_pos.y = 0;
				sc_pos = 0;
			}
			
            SetScrollPos(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,sc_pos,TRUE);
			
			m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
			
		}
		
		InvalidateRect(m_pt_app_info.m_pt_board_hwnd,&m_pt_app_info.m_pt_board_rect,FALSE);
		break;


	}

	
	return 0;
}


LRESULT CALLBACK PtColor_Sel_Proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;

	INT ctrl_id;
	
	DRAWITEMSTRUCT draw_st;


	switch(message)
	{
	case WM_LBUTTONDOWN:
		//TRACE("WM_RBUTTONDOWN \n");
		SendMessage(m_pt_app_info.m_main_win_hwnd,WM_COMMAND,GetDlgCtrlID(hWnd),0);
		break;

	case WM_RBUTTONDOWN:
		//TRACE("WM_RBUTTONDOWN \n");
		SendMessage(m_pt_app_info.m_main_win_hwnd,WM_COMMAND, (0x00000001 << 16) | GetDlgCtrlID(hWnd),0);
		break;
		
    case WM_PAINT:
		hdc = BeginPaint(hWnd,&ps);
		ctrl_id = GetDlgCtrlID(hWnd);
		
		draw_st.CtlID = ctrl_id;
		draw_st.rcItem = ps.rcPaint;
		draw_st.hDC = hdc;
        OnDrawItem(&draw_st);
		
		
		EndPaint(hWnd,&ps);
		break;
	}
	


	//return DefDlgProc(hWnd,message,wParam,lParam);
	return DefWindowProc(hWnd,message,wParam,lParam);
// 	if(m_pt_app_info.m_color_sel_bn_hwnd[0] == hWnd)
// 		return g_sel_color_proc_ptr(hWnd,message,wParam,lParam);
	//return FALSE;
}

LRESULT CALLBACK PtColor_Cur_Proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

	return DefWindowProc(hWnd,message,wParam,lParam);
}

⌨️ 快捷键说明

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