📄 paint.cpp
字号:
// 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 + -