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

📄 paint.cpp

📁 一个使用Windows SDK编写的简单画板程序。实现点、线、矩形、椭圆、文字。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// paint.cpp : Defines the entry point for the application.
//

#include "stdafx.h"

#pragma warning (disable:4786)
#include <iostream>
#include <windows.h>
#include "resource.h"
#include "canvas.h"

using namespace std;
#define MODE_START     0
#define MODE_LINE      1
#define MODE_RECT      2
#define MODE_TEXT      3
#define MODE_CHOOSE    4
#define MODE_ELLIPSE   5
ATOM  MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow);
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK TextProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK EnumWindowsProc(HWND hGetWnd, LPARAM lParam);
BOOL CALLBACK AboutProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
HINSTANCE hAppInstance;
HWND hAppWindow;
Canvas *cns;

typedef struct RELATION
{
	SHAPE_POINT sp;
	char sText[256];
	int iFont;
}RELATION_STRUCT,*pRELATION;

typedef struct COMMUNICATION
{
	int mode;
	RELATION_STRUCT rs;
}
COMMUNICATION_STRUCT, * pCOMMUNICATION;

int APIENTRY WinMain(HINSTANCE hInstance,
					 HINSTANCE hPrevInstance,
					 LPSTR     lpCmdLine,
					 int       nCmdShow)
{
	
	
	MyRegisterClass(hInstance);
	MSG msg;
	if (!InitInstance (hInstance, nCmdShow)) 
	{
		return FALSE;
	}
	
	
	
	while(::GetMessage(&msg,0,0,0))
	{
		::TranslateMessage(&msg);
		::DispatchMessage(&msg);
	}
	
	if(cns)
	{
		delete cns;
	}
	
	
	return msg.wParam;
}

ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX  wndcex;
	
	wndcex.cbClsExtra = 0;
	wndcex.cbSize = sizeof(wndcex);
	wndcex.cbWndExtra = NULL;
	wndcex.hbrBackground = (HBRUSH)::CreateSolidBrush(RGB(180,180,180));
	wndcex.hCursor = ::LoadCursor(0, IDC_ARROW);
	wndcex.hIcon = ::LoadIcon(hInstance,(const char *)IDI_ICON1);
	wndcex.hIconSm = ::LoadIcon(hInstance,(const char *)IDI_ICON1);
	wndcex.hInstance = hInstance;
	wndcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wndcex.lpfnWndProc = WndProc;
	wndcex.lpszClassName = "Mypaint";
	wndcex.lpszMenuName = (LPCTSTR)IDR_MENU1;
	wndcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ;
	
	return  RegisterClassEx(&wndcex);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
	HWND hWnd;
	hAppInstance = hInstance;
	hAppWindow = hWnd = ::CreateWindow("Mypaint",
						  "Mypaint2005",
						  WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
						  CW_USEDEFAULT, CW_USEDEFAULT,
                          CW_USEDEFAULT, CW_USEDEFAULT,
						  NULL,
						  ::LoadMenu(hInstance,(LPCTSTR)IDR_MENU1),
						  hInstance,
						  0);
	
	if (!hWnd)
    {
		return FALSE;
    }
	
	::ShowWindow(hWnd, nCmdShow);
	
	::UpdateWindow(hWnd);
	
	return true;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
    static	POINT tmp_point;
	
	switch(Msg)	
	{
	case WM_COMMAND:
		{
			switch(LOWORD(wParam))
			{
			case IDM_FILE_EXIT:
				{
					if( ::MessageBox(hWnd,"Are you sure to exit?","Paint2005",MB_OKCANCEL)== IDOK)
					{
						::PostQuitMessage(0);
					}
				}
				break;
			case IDM_FILE_OPEN:
				{
					::InvalidateRect(hWnd,NULL,FALSE);
					if(cns)
					{
						delete cns;
						cns = NULL;
					}
					cns = new Canvas;
					if(cns->LoadFromDisk(hWnd))
					{
						::EnableMenuItem(::GetMenu(hWnd),IDM_FILE_CLOSE,MF_ENABLED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_FILE_SAVE,MF_ENABLED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_FILE_SAVEAS,MF_ENABLED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_EDIT_CHOOSE,MF_ENABLED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_EDIT_DELETE,MF_ENABLED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_LINE,MF_ENABLED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_RECTANGE,MF_ENABLED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_ELLIPSE,MF_ENABLED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_TEXT,MF_ENABLED);
					}
					else
					{
						delete cns;
						cns = NULL;
					}
				}
				break;
			case IDM_FILE_NEW:
				{
					::InvalidateRect(hWnd,NULL,FALSE);
					if(cns)
					{
						delete cns;
						cns = NULL;
					}
					cns = new Canvas;
					
					::EnableMenuItem(::GetMenu(hWnd),IDM_FILE_SAVE,MF_ENABLED);
					::EnableMenuItem(::GetMenu(hWnd),IDM_FILE_SAVEAS,MF_ENABLED);
					::EnableMenuItem(::GetMenu(hWnd),IDM_FILE_CLOSE,MF_ENABLED);
					::EnableMenuItem(::GetMenu(hWnd),IDM_EDIT_CHOOSE,MF_ENABLED);
					::EnableMenuItem(::GetMenu(hWnd),IDM_EDIT_DELETE,MF_ENABLED);
					::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_LINE,MF_ENABLED);
					::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_RECTANGE,MF_ENABLED);
					::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_ELLIPSE,MF_ENABLED);
					::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_TEXT,MF_ENABLED);
					
				}
				break;
			case IDM_FILE_CLOSE:
				{
					if(cns)
					{
						delete cns;
						cns = NULL;
						::EnableMenuItem(::GetMenu(hWnd),IDM_FILE_SAVE,MF_GRAYED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_FILE_SAVEAS,MF_GRAYED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_FILE_CLOSE,MF_GRAYED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_EDIT_CHOOSE,MF_GRAYED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_LINE,MF_GRAYED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_RECTANGE,MF_GRAYED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_ELLIPSE,MF_GRAYED);
						::EnableMenuItem(::GetMenu(hWnd),IDM_MODE_TEXT,MF_GRAYED);
					}
					::InvalidateRect(hWnd, NULL, FALSE);
				}
				break;
			case IDM_FILE_SAVE:
				{
					if(cns)
					{
						//::MessageBox(hWnd,"save","save",MB_OK);
						cns->SaveToDisk(hWnd);
					}
					
				}
				break;
			case IDM_FILE_SAVEAS:
				{
					if(cns)
					{
						cns->SaveAsToDisk(hWnd);
					}
				}
				break;
			case IDM_EDIT_CHOOSE:
				{
					if(cns)
					{
						cns->SetMode(MODE_CHOOSE);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_CHOOSE, MF_CHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_DELETE, MF_UNCHECKED);
						::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_UNCHECKED);

					}
				}
				break;
			case IDM_EDIT_DELETE:
				{
					if(cns)
					{
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_CHOOSE, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_EDIT_DELETE, MF_CHECKED);
						if(cns->GetMode()==MODE_CHOOSE)
						{
							cns->Delete(hWnd);
							cns->Draw(hWnd);
						}
					}
				}
				break;
			case IDM_CN:
				{
					if(cns)
					{
						::CheckMenuItem(::GetMenu(hWnd), IDM_CN, MF_CHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNBI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNR, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRBI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_A, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_AB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_AI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_ABI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_S, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_KT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_ST, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_LS, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_HT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_YY, MF_UNCHECKED);
						cns->SetFont(1);
						if(cns->GetMode() == MODE_CHOOSE && cns->GetChoose_Mode() ==3)
							cns->Choose_text(hWnd);
					}
				}
				break;
			case IDM_CNB:
				{
					if(cns)
					{
						::CheckMenuItem(::GetMenu(hWnd), IDM_CN, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNB, MF_CHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNBI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNR, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRBI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_A, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_AB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_AI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_ABI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_S, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_KT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_ST, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_LS, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_HT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_YY, MF_UNCHECKED);
						cns->SetFont(2);
						if(cns->GetMode() == MODE_CHOOSE && cns->GetChoose_Mode() ==3)
							cns->Choose_text(hWnd);
					}
				}
				break;
			case IDM_CNI:
				{
					if(cns)
					{
						::CheckMenuItem(::GetMenu(hWnd), IDM_CN, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNI, MF_CHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNBI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNR, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRBI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_A, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_AB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_AI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_ABI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_S, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_KT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_ST, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_LS, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_HT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_YY, MF_UNCHECKED);
						cns->SetFont(3);
						if(cns->GetMode() == MODE_CHOOSE && cns->GetChoose_Mode() ==3)
							cns->Choose_text(hWnd);
					}
				}
				break;
			case IDM_CNBI:
				{
					if(cns)
					{
						::CheckMenuItem(::GetMenu(hWnd), IDM_CN, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNBI, MF_CHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNR, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRBI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_A, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_AB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_AI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_ABI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_S, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_KT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_ST, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_LS, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_HT, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_YY, MF_UNCHECKED);
						cns->SetFont(4);
						if(cns->GetMode() == MODE_CHOOSE && cns->GetChoose_Mode() ==3)
							cns->Choose_text(hWnd);
					}
				}
				break;
			case IDM_TNR:
				{
					if(cns)
					{
						::CheckMenuItem(::GetMenu(hWnd), IDM_CN, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_CNBI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNR, MF_CHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_TNRBI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_A, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_AB, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_AI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_ABI, MF_UNCHECKED);
						::CheckMenuItem(::GetMenu(hWnd), IDM_S, MF_UNCHECKED);

⌨️ 快捷键说明

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