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

📄 paint.cpp

📁 一个使用Windows SDK编写的简单画板程序。实现点、线、矩形、椭圆、文字。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_RECTANGE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_ELLIPSE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_TEXT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_CHOOSE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_DELETE, MF_UNCHECKED);
					}
				}
				break;
			case IDM_MODE_RECTANGE:
				{
					if(cns)
					{
						cns->SetMode(MODE_RECT);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_LINE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_RECTANGE, MF_CHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_ELLIPSE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_TEXT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_CHOOSE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_DELETE, MF_UNCHECKED);
					}
				}
				break;
			case IDM_MODE_ELLIPSE:
				{
					if(cns)
					{
						cns->SetMode(MODE_ELLIPSE);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_LINE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_RECTANGE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_ELLIPSE, MF_CHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_TEXT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_CHOOSE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_DELETE, MF_UNCHECKED);
					}
				}
				break;
			case IDM_MODE_TEXT:
				{
					if(cns)
					{
						cns->SetMode(MODE_TEXT);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_LINE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_RECTANGE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_ELLIPSE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_MODE_TEXT, MF_CHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_CHOOSE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_DELETE, MF_UNCHECKED);
					}
				}
				break;
				
				
			case IDM_HELP_ABOUT:
				{
					::DialogBox(hAppInstance,(const char *)IDD_ABOUT,hWnd,AboutProc);
				}
				break;
			default:
				{
					
				}
				break;
			}
		}
		break;
		
	case WM_COPYDATA:
		{
			if(cns)
			{
				COPYDATASTRUCT *pcd;
				pcd = (COPYDATASTRUCT*)lParam;
				if(pcd->dwData == MODE_LINE)
				{
					SHAPE_POINT tsp;
					tsp =((RELATION*)(pcd->lpData))->sp;
					cns->Start_line(tsp.start_x,tsp.start_y);
					cns->Draw_line(hWnd,tsp.end_x,tsp.end_y);
				}
				else if( pcd->dwData == MODE_RECT)
				{
					SHAPE_POINT tsp;
					tsp = ((RELATION*)(pcd->lpData))->sp;
					cns->Start_rect(tsp.start_x,tsp.start_y);
					cns->Draw_rect(hWnd,tsp.end_x,tsp.end_y);
				}
				else if( pcd->dwData == MODE_ELLIPSE)
				{
					SHAPE_POINT tsp;
					tsp = ((RELATION*)(pcd->lpData))->sp;
					cns->Start_ellipse(tsp.start_x,tsp.start_y);
					cns->Draw_ellipse(hWnd,tsp.end_x,tsp.end_y);
				}
				else if( pcd->dwData == MODE_TEXT)
				{
					SHAPE_POINT tsp;
					int ifont;
					char text[256];
					tsp = ((RELATION*)(pcd->lpData))->sp;
					ifont = ((RELATION*)(pcd->lpData))->iFont;
					strcpy(text , ((RELATION*)(pcd->lpData))->sText);
					cns->SetFont(ifont);
					cns->Input_text(hWnd,tsp.start_x,tsp.start_y,text);
					
				}
			}
		}
		break;
	case  WM_KEYDOWN:
		{
			if(cns->GetMode()==MODE_CHOOSE && wParam == VK_DELETE)
			{
				cns->Delete(hWnd);
				cns->Draw(hWnd);
			}
		}
		break;
	case WM_PAINT:
		{
			
			HDC hDc;
			RECT rect;
			::GetClientRect(hWnd, &rect);
			hDc = ::GetDC(hWnd);
			if(cns)
			{
				::FillRect(hDc, &rect, ::CreateSolidBrush(RGB(255,255,255)));
				cns->Draw(hWnd);
			}
			else
				::FillRect(hDc, &rect, ::CreateSolidBrush(RGB(180,180,180)));
			::ReleaseDC(hWnd, hDc);
			
		}
		break;
	case WM_MOUSEMOVE:
		{
			if(cns)
			{
				if(cns->GetMode()==MODE_LINE && cns->GetState()==1)
				{
					
					::SetCursor(::LoadCursor(0, IDC_CROSS));
					cns->Move_line(hWnd,LOWORD(lParam),HIWORD(lParam));
					cns->Draw(hWnd);
				}
				else if(cns->GetMode()==MODE_RECT && cns->GetState()==1)
				{
					::SetCursor(::LoadCursor(0, IDC_CROSS));
					cns->Move_rect(hWnd,LOWORD(lParam),HIWORD(lParam));
					cns->Draw(hWnd);
				}
				if(cns->GetMode()==MODE_ELLIPSE && cns->GetState()==1)
				{
					
					::SetCursor(::LoadCursor(0, IDC_CROSS));
					cns->Move_ellipse(hWnd,LOWORD(lParam),HIWORD(lParam));
					cns->Draw(hWnd);
				}
			}
		}
		break;
	case WM_LBUTTONUP:
		{
			if(cns)
			{
				if(cns->GetMode()==MODE_LINE && cns->GetState() ==1)
				{
					//::SetCursor(::LoadCursor(0, IDC_CROSS));
					cns->Draw_line(hWnd,LOWORD(lParam),HIWORD(lParam));
					COMMUNICATION_STRUCT * pcm = new COMMUNICATION_STRUCT;
					pcm->mode = MODE_LINE;
					pcm->rs.sp.start_x = tmp_point.x;
					pcm->rs.sp.start_y = tmp_point.y;
					pcm->rs.sp.end_x = LOWORD(lParam);
					pcm->rs.sp.end_y = HIWORD(lParam);
					::EnumWindows((WNDENUMPROC)EnumWindowsProc,(LPARAM)(pcm));
				}
				else if(cns->GetMode()==MODE_RECT && cns->GetState()==1)
				{
					::SetCursor(::LoadCursor(0, IDC_CROSS));
					cns->Draw_rect(hWnd,LOWORD(lParam),HIWORD(lParam));
					COMMUNICATION_STRUCT * pcm = new COMMUNICATION_STRUCT;
					pcm->mode = MODE_RECT;
					pcm->rs.sp.start_x = tmp_point.x;
					pcm->rs.sp.start_y = tmp_point.y;
					pcm->rs.sp.end_x = LOWORD(lParam);
					pcm->rs.sp.end_y = HIWORD(lParam);
					::EnumWindows((WNDENUMPROC)EnumWindowsProc,(LPARAM)(pcm));
				}
				if(cns->GetMode()==MODE_ELLIPSE && cns->GetState() ==1)
				{
					cns->Draw_ellipse(hWnd,LOWORD(lParam),HIWORD(lParam));
					COMMUNICATION_STRUCT * pcm = new COMMUNICATION_STRUCT;
					pcm->mode = MODE_ELLIPSE;
					pcm->rs.sp.start_x = tmp_point.x;
					pcm->rs.sp.start_y = tmp_point.y;
					pcm->rs.sp.end_x = LOWORD(lParam);
					pcm->rs.sp.end_y = HIWORD(lParam);
					::EnumWindows((WNDENUMPROC)EnumWindowsProc,(LPARAM)(pcm));
				}
			}
		}
		break;
	case WM_LBUTTONDOWN:
		{
			if(cns)
			{
				
				if(cns->GetMode()==MODE_LINE )
				{
					::SetCursor(::LoadCursor(0, IDC_CROSS));
					tmp_point.x = LOWORD(lParam);
					tmp_point.y = HIWORD(lParam);
					cns->Start_line(LOWORD(lParam),HIWORD(lParam));
				}
				else if(cns->GetMode()==MODE_RECT )
				{	
					tmp_point.x = LOWORD(lParam);
					tmp_point.y = HIWORD(lParam);
					::SetCursor(::LoadCursor(0, IDC_CROSS));
					cns->Start_rect(LOWORD(lParam),HIWORD(lParam));
				}
				if(cns->GetMode()==MODE_ELLIPSE )
				{
					::SetCursor(::LoadCursor(0, IDC_CROSS));
					tmp_point.x = LOWORD(lParam);
					tmp_point.y = HIWORD(lParam);
					cns->Start_ellipse(LOWORD(lParam),HIWORD(lParam));
				}
			}
		}
		break;
	case WM_LBUTTONDBLCLK:
		{
			if(cns)
			{
				if(cns->GetMode()==MODE_TEXT)
				{
					char In_Text[256];
					char *pIn_Text;
					
					pIn_Text = (char*)::DialogBox(hAppInstance, (const char *)IDD_TEXT, hWnd, TextProc);
					if(pIn_Text!= NULL)
						strcpy(In_Text,pIn_Text);
					tmp_point.x = LOWORD(lParam);
					tmp_point.y = HIWORD(lParam); 
					if(pIn_Text)
					{
						cns->Input_text(hWnd,LOWORD(lParam),HIWORD(lParam),In_Text);
						
						
						COMMUNICATION_STRUCT * pcm = new COMMUNICATION_STRUCT;
						pcm->mode = MODE_TEXT;
						pcm->rs.sp.start_x = tmp_point.x;
						pcm->rs.sp.start_y = tmp_point.y;
						pcm->rs.sp.end_x = LOWORD(lParam);
						pcm->rs.sp.end_y = HIWORD(lParam);
						pcm->rs.iFont = cns->GetFont();
						strcpy(pcm->rs.sText, In_Text);
						::EnumWindows((WNDENUMPROC)EnumWindowsProc,(LPARAM)(pcm));
						free(pIn_Text);
					}
				}
				if(cns->GetMode()==MODE_CHOOSE)
				{
					cns->Choose(hWnd,LOWORD(lParam),HIWORD(lParam));
					cns->Draw(hWnd);
				}
			}
		}
		break;
	case WM_DESTROY:
		{
			::PostQuitMessage(0);
		}
		break;
	case WM_CLOSE:
		{
			if(::MessageBox(hWnd,"Are you sure to exit?","paint2005",MB_OKCANCEL)==IDOK)
			{
				::DestroyWindow(hWnd);
			}
		}
		return 0;
	default:
		break;
	}
	return (::DefWindowProc(hWnd, Msg, wParam, lParam));
}



BOOL CALLBACK TextProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
	switch(Msg)
	{
	case WM_INITDIALOG:
		{
			return true;
		}
		break;
	case WM_COMMAND:
		{
			switch (LOWORD(wParam) )
			{
			case IDC_OK:
			{
				char* pText;
				pText = (char*)malloc(1000);
				::GetDlgItemText(hDlg,IDC_EDIT,pText,1000);
				::EndDialog(hDlg, (int)pText);
				
			}
			break;
			case IDC_CANCEL:
			{
				
				::EndDialog(hDlg,0);
			}
			break;
			}
		}
		
	default:
		break;
	}
	return false;
}

BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
	if(hWnd == hAppWindow)
	{
		return true;
	}
	char Title[256];
	::GetWindowText(hWnd,Title,255);
	
	if(strcmp(Title,"Mypaint2005"))
	{
		return true;
	}
	
	COPYDATASTRUCT cd;
	
	cd.dwData = ((COMMUNICATION_STRUCT*)lParam)->mode;
	cd.cbData = sizeof(((COMMUNICATION_STRUCT*)lParam)->rs);
	cd.lpData = &(((COMMUNICATION_STRUCT*)lParam)->rs);
	
	::SendMessage(hWnd,WM_COPYDATA,0,(LPARAM)(&cd));
	
	return true;
}

BOOL CALLBACK AboutProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_INITDIALOG:
		{
			return true;
		}
		break;
	case WM_COMMAND:
		{
			switch( LOWORD(wParam))
			{
			case IDOK:
				{
					::EndDialog(hWnd,0);
				}
				break;
			}
		}
	default:
		break;
	}
	return false;
}

⌨️ 快捷键说明

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