发布网友 发布时间:2022-04-24 09:01
共3个回答
热心网友 时间:2022-06-18 07:49
不知道你准备用什么来进行编写,下面是VC2005中的实现
系统时间可以通过
SYSTEMTIME st;
CString strDate,strTime;
GetLocalTime(&st);
来获得.
你可以在程序中判断秒的值,来获得显示的值,比如说大于50秒就显示5,来实现精确到10秒.
至于界面你可以用MFC 新建一对话框程序,将对话框的border属性改为none去掉标题栏那些.再通过dc将你的时间展现在对话框上即可,至于颜色可以通过修改对话框着色,字体颜色来实现。
热心网友 时间:2022-06-18 07:49
/*------------------------------
数字时钟
--------------------------------*/
#include<windows.h>
#define C winClass
#define ID_TIMER 1
LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance ,LPSTR lpCmdLine,int nCmdShow)
{
HWND hwnd;
MSG msg;
TCHAR szParent[]= TEXT("36");
WNDCLASSEX C;
C.cbClsExtra =0;
C.cbWndExtra =0;
C.cbSize =sizeof(C);
C.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
C.hCursor =LoadCursor(NULL,IDC_ARROW);
C.hIcon =NULL;
C.hIconSm =NULL;
C.hInstance =hInstance;
C.lpfnWndProc =WinProc;
C.lpszClassName =szParent;
C.lpszMenuName =NULL;
C.style =CS_NOCLOSE;
if(!RegisterClassEx(&C))
{
MessageBox(NULL,TEXT("35"),szParent,MB_ICONERROR);
return 0;
}
hwnd = CreateWindowEx(NULL,szParent,NULL,
WS_SIZEBOX ,
60,
40,
60,
60,
NULL,NULL,
hInstance,
NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
void DisplayDigit(HDC hdc,int iNumber)
{
static BOOL fSevenSegment[10][7] = {
1,1,1,0,1,1,1, //0
0,0,1,0,0,1,0, //1
1,0,1,1,1,0,1, //2
1,0,1,1,0,1,1, //3
0,1,1,1,0,1,0, //4
1,1,0,1,0,1,1, //5
1,1,0,1,1,1,1, //6
1,0,1,0,0,1,0, //7
1,1,1,1,1,1,1, //8
1,1,1,1,0,1,1 //9
};
static POINT ptSegMent[7][6] = {
7,6,11,2,31,2,35,6,31,10,11,10,
6,7,10,11,10,31,6,35,2,31,2,11,
36,7,40,11,40,31,36,35,32,31,32,11,
7,36,11,32,31,32,35,36,31,40,11,40,
6,37,10,41,10,61,6,65,2,61,2,41,
36,37,40,41,40,61,36,65,32,61,32,40,
7,66,11,62,31,62,35,66,31,70,11,70
};
int iSeg;
for(iSeg = 0;iSeg < 7 ;iSeg ++)
if(fSevenSegment[iNumber][iSeg])
Polygon(hdc,ptSegMent[iSeg],6);
}
void DisplayTwoDigits(HDC hdc, int iNumber,BOOL fSupperss)
{
if(!fSupperss || (iNumber /10 !=0))
DisplayDigit(hdc,iNumber/10);
OffsetWindowOrgEx(hdc,-42,0,NULL);
DisplayDigit(hdc,iNumber %10);
OffsetWindowOrgEx(hdc, -42,0,NULL);
}
void DisplayColon(HDC hdc)
{
POINT ptColon[2][4] = { 2,21,6,17,10,21,6,25,
2,51,6,47,10,51,6,55};
Polygon(hdc,ptColon[0],4);
Polygon(hdc,ptColon[1],4);
OffsetWindowOrgEx(hdc,-12,0,NULL);
}
void DisplayTime(HDC hdc, BOOL f24Hour,BOOL fSuppress)
{
SYSTEMTIME st;
GetLocalTime(&st);
if(f24Hour)
DisplayTwoDigits(hdc,st.wHour,fSuppress);
else
DisplayTwoDigits(hdc,(st.wHour%=12)?st.wHour:12,fSuppress);
DisplayColon(hdc);
DisplayTwoDigits(hdc,st.wMinute,FALSE);
DisplayColon(hdc);
DisplayTwoDigits(hdc,st.wSecond,FALSE);
}
LRESULT CALLBACK WinProc(HWND hwnd,UINT msg, WPARAM wParam ,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static BOOL f24Hour,fSuppress;
static HBRUSH hBrushRed;
static int cxClient,cyClient;
TCHAR szBuffer[2];
switch(msg)
{
case WM_CREATE:
hdc = GetDC(hwnd);
SetBkColor(hdc,RGB(255,255,0));
hBrushRed = CreateSolidBrush(RGB(0,0,255));
SetTimer(hwnd,ID_TIMER,1000,NULL);
ReleaseDC(hwnd,hdc);
case WM_SETTINGCHANGE:
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_ITIME,szBuffer,2);
f24Hour = (szBuffer[0] =='1');
GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_ITLZERO,szBuffer,2);
fSuppress = (szBuffer[0] =='0');
InvalidateRect(hwnd,NULL,TRUE);
return 0;
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
return 0;
case WM_TIMER:
InvalidateRect(hwnd,NULL,TRUE);
return 0;
case WM_KEYDOWN:
switch(LOWORD(wParam))
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
}
case WM_PAINT :
hdc = BeginPaint(hwnd, &ps);
SelectObject(hdc,CreatePen(PS_SOLID ,1,RGB(255,255,255)));
SetMapMode(hdc,MM_ISOTROPIC);
SetWindowExtEx(hdc,276,72,NULL);
SetViewportExtEx(hdc,cxClient,cyClient,NULL);
SetWindowOrgEx(hdc,138,36,NULL);
SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL);
SelectObject(hdc,GetStockObject(NULL_PEN));
SelectObject(hdc,hBrushRed);
DisplayTime(hdc,f24Hour,fSuppress);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
KillTimer(hwnd,ID_TIMER);
DeleteObject(hBrushRed);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
此程序有你说的功能,按ESC 键退出
热心网友 时间:2022-06-18 07:50
...怪异