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