#include<windows.h>
#include<math.h>
#include"ball.h"
///////////////////////////////////////////////
//
//WinMain函数
//
int APIENTRY WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
MSG msg;
if(!InitApplication(hInstance))
return FALSE;
if(!InitInstance(hInstance,nCmdShow))
return FALSE;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
///////////////////////////////////////////////
//
//主窗口处理函数
//
LRESULT APIENTRY MainWndProc
(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
HDC hDC;
PAINTSTRUCT ps;
HBRUSH hBrush;
HMENU hMenu0;
switch(message)
{
case WM_CREATE:
SetTimer(hWnd,1,5,NULL);
break;
//-----------------------------------------------------------------------------------
case WM_TIMER:
if(flag4)
InvalidateRect(hWnd,NULL,1);
break;
case WM_PAINT:
hDC=BeginPaint(hWnd,&ps);
SetMapMode(hDC,MM_ISOTROPIC);
SetWindowExtEx(hDC,150,150,NULL);//设置窗口区域
SetViewportExtEx(hDC,150,100,NULL);//设置视口区域
SetViewportOrgEx(hDC,120,60,NULL);//设置视口原点
hBrush=CreateSolidBrush(RGB(BkgRGB[0],BkgRGB[1],BkgRGB[2]));
SelectObject(hDC,hBrush);
Rectangle(hDC,0,0,nlength,nwidth);
hBrush=CreateSolidBrush(RGB(BallRGB[0],BallRGB[1],BallRGB[2]));
SelectObject(hDC,hBrush);
Ellipse(hDC,(int)(nX-Radious),(int)(nY-Radious),(int)(nX+Radious),(int)(nY+Radious));
alfa=alfa/180*PI;
if(flag1)
{
nX+=xMove;
if(nX>nlength-Radious)
{
nX=nlength-Radious;
flag1=FALSE;
}
}
else
{
nX-=xMove;
if(nX<Radious)
{
nX=Radious;
flag1=TRUE;
}
}
if(flag2)
{
nY-=yMove;
if(nY<Radious)
{
nY=Radious;
flag2=FALSE;
}
}
else
{
nY+=yMove;
if(nY>nwidth-Radious)
{
nY=nwidth-Radious;
flag2=TRUE;
}
}
EndPaint(hWnd,&ps);
break;
//菜单事件
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_BALLRGB:
flag3=TRUE;
DialogBox(hInst,"RGBDlg",hWnd,(DLGPROC)RGBDlgProc);
break;
case IDM_BKGRGB:
flag3=FALSE;
DialogBox(hInst,"RGBDlg",hWnd,(DLGPROC)RGBDlgProc);
break;
case IDM_ANGLE:
DialogBox(hInst,"ANGLEDLG",hWnd,(DLGPROC)ANGDlgProc);
break;
case IDM_R1:
Radious=30;
hMenu0=GetMenu(hWnd);
CheckMenuItem(hMenu0,IDM_R1,MF_BYCOMMAND|MF_CHECKED);
CheckMenuItem(hMenu0,IDM_R2,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(hMenu0,IDM_R3,MF_BYCOMMAND|MF_UNCHECKED);
break;
case IDM_R2:
Radious=40;
hMenu0=GetMenu(hWnd);
CheckMenuItem(hMenu0,IDM_R1,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(hMenu0,IDM_R2,MF_BYCOMMAND|MF_CHECKED);
CheckMenuItem(hMenu0,IDM_R3,MF_BYCOMMAND|MF_UNCHECKED);
break;
case IDM_R3:
Radious=50;
hMenu0=GetMenu(hWnd);
CheckMenuItem(hMenu0,IDM_R1,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(hMenu0,IDM_R2,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(hMenu0,IDM_R3,MF_BYCOMMAND|MF_CHECKED);
break;
case IDM_START:
flag4=TRUE;
hMenu=GetMenu(hWnd);
EnableMenuItem(hMenu,IDM_START,MF_GRAYED);
EnableMenuItem(hMenu,IDM_STOP,MF_ENABLED);
EnableMenuItem(hMenu,IDM_RESERT,MF_ENABLED);
break;
case IDM_STOP:
flag4=FALSE;
EnableMenuItem(hMenu,IDM_START,MF_ENABLED);
EnableMenuItem(hMenu,IDM_STOP,MF_GRAYED);
break;
case IDM_RESERT:
flag4=FALSE;
nX=Radious;
nY=nwidth-Radious;
EnableMenuItem(hMenu,IDM_START,MF_ENABLED);
EnableMenuItem(hMenu,IDM_STOP,MF_GRAYED);
EnableMenuItem(hMenu,IDM_RESERT,MF_GRAYED);
InvalidateRect(hWnd,NULL,1);
break;
case IDM_EXIT:
PostQuitMessage(0);
break;
case IDM_ABOUT:
DialogBox(hInst,"ABOUT",hWnd,(DLGPROC)About);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
KillTimer(hWnd,1);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////
//
//颜色设置对话框处理函数
//
BOOL APIENTRY RGBDlgProc
(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
static int CurrentVal[3],PrevVal[3];
static HWND hwScroll[3];
char szString[10];
int i;
switch(message)
{
case WM_INITDIALOG:
//分别设置滚动条的范围和初始位置
for(i=0;i<3;i++)
{
if(flag3)
{
CurrentVal[i]=BallRGB[i];
PrevVal[i]=BallRGB[i];
}
else
{
CurrentVal[i]=BkgRGB[i];
PrevVal[i]=BkgRGB[i];
}
hwScroll[i]=GetDlgItem(hDlg,IDC_RED+i);
SetScrollRange(hwScroll[i],SB_CTL,0,255,FALSE);
SetScrollPos(hwScroll[i],SB_CTL,CurrentVal[i],TRUE);
SetDlgItemText(hDlg,IDC_VALRED+i,itoa(CurrentVal[i],szString,10));
}
SetFocus(hwScroll[0]);
break;
//处理滚动条通知消息
case WM_HSCROLL:
i=0;
while(hwScroll[i]!=(HWND)lParam)
i++;
switch(LOWORD(wParam))
{
case SB_LINEDOWN:
CurrentVal[i]++;
if(CurrentVal[i]>255)
CurrentVal[i]=255;
break;
case SB_LINEUP:
CurrentVal[i]--;
if(CurrentVal[i]<0)
CurrentVal[i]=0;
break;
case SB_PAGEDOWN:
CurrentVal[i]+=(255-CurrentVal[i]/2);
break;
case SB_PAGEUP:
CurrentVal[i]-=CurrentVal[i]/2;
break;
case SB_THUMBTRACK:
CurrentVal[i]=HIWORD(wParam);
break;
case SB_TOP:
CurrentVal[i]=0;
break;
case SB_BOTTOM:
CurrentVal[i]=255;
break;
}
//设定滚动条的位置及其对应的文字
SetScrollPos(hwScroll[i],SB_CTL,CurrentVal[i],TRUE);
SetDlgItemText(hDlg,IDC_VALRED+i,itoa(CurrentVal[i],szString,10));
if(flag3)
BallRGB[i]=CurrentVal[i];
else
BkgRGB[i]=CurrentVal[i];
break;
case WM_COMMAND:
switch(wParam)
{
case IDOK:
for(i=0;i<3;i++)
if(flag3)
BallRGB[i]=CurrentVal[i];
else
BkgRGB[i]=CurrentVal[i];
EndDialog(hDlg,TRUE);
return TRUE;
case IDCANCEL:
for(i=0;i<3;i++)
if(flag3)
BallRGB[i]=PrevVal[i];
else
BkgRGB[i]=PrevVal[i];
EndDialog(hDlg,TRUE);
return TRUE;
}
break;
}
return FALSE;
}
////////////////////////////////////////////////////////////////
//
//About对话框消息处理函数
//
BOOL APIENTRY About(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
switch(message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if(LOWORD(wParam)==IDOK||LOWORD(wParam)==IDCANCEL)
{
EndDialog(hDlg,TRUE);
return TRUE;
}
break;
}
return FALSE;
}
/////////////////////////////////////////////////////
//
//角度对话框处理函数
//
BOOL APIENTRY ANGDlgProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
static HWND hComBox;
double jiaodu;
char Ang[]="";
int nMax; //组合框输入字符串的长度
char combox[]="" , //存放组合框输入的字符
*stop; //为函数strtol定义的终止字符指针
switch(message)
{
case WM_INITDIALOG:
hComBox=GetDlgItem(hDlg,IDC_COMBO);
SetWindowText(hComBox,"45");
SendDlgItemMessage(hDlg,IDC_COMBO,CB_ADDSTRING,0,(LPARAM)"0");
SendDlgItemMessage(hDlg,IDC_COMBO,CB_ADDSTRING,0,(LPARAM)"30");
SendDlgItemMessage(hDlg,IDC_COMBO,CB_ADDSTRING,0,(LPARAM)"45");
SendDlgItemMessage(hDlg,IDC_COMBO,CB_ADDSTRING,0,(LPARAM)"60");
SendDlgItemMessage(hDlg,IDC_COMBO,CB_ADDSTRING,0,(LPARAM)"90");
return TRUE;
case WM_COMMAND:
switch(