发个完整的数字手表的代码,大家给点意见。
给点意见。
/*---------------------------------------------------------------------------------------- CurosrBlock.c CursorBlock.c Display how to cursor (C)HuZengQiang 2004 ----------------------------------------------------------------------------------------*/ #include <windows.h> /*------------------------------------------------------------------------------------- constant number ------------------------------------------------------------------------------------*/ #define ID_TIMER 1 /*----------------------------------------------------------------------------------- Function Protype -----------------------------------------------------------------------------------*/ LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); void DisplayOneDigital(HDC,int); void DisplayTwoDigital(HDC,int); void DisplayColon(HDC); void DisplayTime(HDC); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { WNDCLASS WndClass; MSG msg; TCHAR szAppName[] = TEXT("Cursor_Block"); HWND hwnd; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.hCursor = LoadCursor(NULL,IDC_ARROW); WndClass.hIcon = LoadIcon(NULL,IDI_APPLICATION); WndClass.hInstance = hInstance; WndClass.lpfnWndProc = WndProc; WndClass.lpszClassName = szAppName; WndClass.lpszMenuName = NULL; WndClass.style = CS_HREDRAW|CS_VREDRAW; if(!RegisterClass(&WndClass)) { MessageBox( NULL, TEXT("Register Class Error!"), TEXT("Error!"), MB_ICONERROR ); return 0; } hwnd = CreateWindow( szAppName, TEXT("Sin_Wave Display Progma"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg,hwnd,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } /* void DrawBoxOutline(HWND hwnd,POINT ptBeg,POINT ptEnd) { HDC hdc; hdc = GetDC(hwnd); SetROP2(hdc,R2_NOT); SelectObject(hdc,GetStockObject(NULL_BRUSH)); Rectangle(hdc,ptBeg.x,ptBeg.y,ptEnd.x,ptEnd.y); DeleteObject(SelectObject(hdc,GetStockObject(BLACK_BRUSH))); ReleaseDC(hwnd,hdc); return; } LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { static POINT ptBeg,ptEnd; static BOOL fBlocking,fValidRect; PAINTSTRUCT ps; HDC hdc; switch(message) { case WM_LBUTTONDOWN: ptBeg.x = ptEnd.x = LOWORD(lParam); ptBeg.y = ptBeg.y = HIWORD(lParam); DrawBoxOutline(hwnd,ptBeg,ptEnd); SetCapture(hwnd); SetCursor(LoadCursor(NULL,IDC_CROSS)); fBlocking = TRUE; break; case WM_MOUSEMOVE: if(TRUE == fBlocking) { SetCursor(LoadCursor(NULL,IDC_CROSS)); DrawBoxOutline(hwnd,ptBeg,ptEnd); ptEnd.x = LOWORD(lParam); ptEnd.y = HIWORD(lParam); SetCursor(LoadCursor(NULL,IDC_CROSS)); DrawBoxOutline(hwnd,ptBeg,ptEnd); } break; case WM_LBUTTONUP: if(TRUE == fBlocking) { SetCursor(LoadCursor(NULL,IDC_ARROW)); ptEnd.x = LOWORD(lParam); ptEnd.y = HIWORD(lParam); DrawBoxOutline(hwnd,ptBeg,ptEnd); ReleaseCapture(); fBlocking = FALSE; fValidRect = TRUE; } InvalidateRect(hwnd,NULL,TRUE); break; case WM_PAINT: hdc = BeginPaint(hwnd,&ps); if(TRUE == fValidRect) { SelectObject(hdc,GetStockObject(BLACK_BRUSH)); Rectangle(hdc,ptBeg.x,ptBeg.y,ptEnd.x,ptEnd.y); fValidRect = FALSE; } EndPaint(hwnd,&ps); break; } return DefWindowProc(hwnd,message,wParam,lParam); } */ /* LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static BOOL bFill; HBRUSH brush; RECT rect; switch(message) { case WM_CREATE: SetTimer(hwnd,ID_TIMER,1000,NULL); return 0; case WM_TIMER: MessageBeep(-1); bFill = ! bFill; InvalidateRect(hwnd,NULL,TRUE); return 0; case WM_PAINT: hdc = BeginPaint(hwnd,&ps); GetClientRect(hwnd,&rect); brush = CreateSolidBrush(bFill?RGB(255,0,0):RGB(0,0,255)); FillRect(hdc,&rect,brush); EndPaint(hwnd,&ps); DeleteObject(brush); return 0; case WM_DESTROY: KillTimer(hwnd,ID_TIMER); PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,message,wParam,lParam); } */ void DisplayOneDigital(HDC hdc,int iNum) { int i; int iNumDisplay[10][7] = { 1,1,1,1,1,1,0, 0,1,1,0,0,0,0, 1,1,0,1,1,0,1, 1,1,1,1,0,0,1, 0,1,1,0,0,1,1, 1,0,1,1,0,1,1, 1,0,1,1,1,1,1, 1,1,1,0,0,0,0, 1,1,1,1,1,1,1, 1,1,1,0,0,1,1 }; POINT ptNum[7][6] = { 2,-14,4,-16,14,-16,16,-14,14,-12,4,-12, 14,-12,16,-14,18,-12,18,-2,16,0,14,-2, 14,2,16,0,18,2,18,12,16,14,14,12, 2,14,4,12,14,12,16,14,14,16,4,16, 0,2,2,0,4,2,4,12,2,14,0,12, 0,-12,2,-14,4,-12,4,-2,2,0,0,-2, 2,0,4,-2,14,-2,16,0,14,2,4,2 }; for(i=0;i<7;i++) if(iNumDisplay[iNum][i]) Polygon(hdc,ptNum[i],6); return ; } void DisplayColon(HDC hdc) { int i; POINT ptColon[2][4] = { 0,-7,2,-9,4,-7,2,-5, 0,7,2,5,4,7,2,9 }; for(i = 0;i<2;i++) Polygon(hdc,ptColon[i],4); return ; } void DisplayTwoDigital(HDC hdc,int iNum) { int iMedia; iMedia = iNum/10; DisplayOneDigital(hdc,iMedia); OffsetWindowOrgEx(hdc,-20,0,NULL); iMedia = iNum%10; DisplayOneDigital(hdc,iMedia); return; } void DisplayTime(HDC hdc) { SYSTEMTIME tm; int iHour,iMin,iSec; GetLocalTime(&tm); iHour = tm.wHour; DisplayTwoDigital(hdc,iHour); OffsetWindowOrgEx(hdc,-20,0,NULL); DisplayColon(hdc); iMin = tm.wMinute; OffsetWindowOrgEx(hdc,-20,0,NULL); DisplayTwoDigital(hdc,iMin); OffsetWindowOrgEx(hdc,-20,0,NULL); DisplayColon(hdc); iSec = tm.wSecond; OffsetWindowOrgEx(hdc,-20,0,NULL); DisplayTwoDigital(hdc,iSec); return ; } LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { static int cxClient,cyClient; static RECT ClientRect; PAINTSTRUCT ps; HDC hdc; switch(message) { case WM_CREATE: SetTimer(hwnd,ID_TIMER,1000,NULL); break; case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); break; case WM_TIMER: InvalidateRect(hwnd,NULL,TRUE); break; case WM_PAINT: hdc = BeginPaint(hwnd,&ps); SetMapMode(hdc,MM_ISOTROPIC); SetWindowExtEx(hdc,144,144,NULL); SetViewportExtEx(hdc,cxClient,cyClient,NULL); SetWindowOrgEx(hdc,72,72,NULL); SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL); OffsetWindowOrgEx(hdc,0,-72,NULL); SelectObject(hdc,GetStockObject(BLACK_PEN)); DisplayTime(hdc); DeleteObject(SelectObject(hdc,GetStockObject(BLACK_PEN))); EndPaint(hwnd,&ps); break; case WM_DESTROY: KillTimer(hwnd,ID_TIMER); PostQuitMessage(0); return 0; } return DefWindowProc(hwnd,message,wParam,lParam); }
注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/3112.html
如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:)
A B C D E
guoshan 于 2005-01-06 11:11:08.0 编辑 [回复该贴]
jerry 于 2004-09-01 09:14:48.0 编辑 [回复该贴]