如何调用当地时间?

左眼的彼岸 2011-04-27 10:12:57

#include<windows.h>
#include<stdio.h>
#include<math.h>
static int x=250,y=250;
#define PI 3.1415926
static int r=150,sr=140,mr=120,hr=90;
static int sx,sy,mx,my,hx,hy;
static int mm=0,ss=0,hh=0;
static int s1=0,s2=0;

long CALLBACK WndProc(HWND hWnd, int message, int wParam, int lParam);

int _stdcall WinMain(HINSTANCE hInstance,
HINSTANCE hPrelnstance,
LPSTR lpCmdLine,
int nShowCmd)
{

//1、设置窗体属性
WNDCLASSEX wcex;

// 结构体的大小
wcex.cbSize = sizeof(WNDCLASSEX);
// 窗体类的样式
wcex.style = CS_HREDRAW | CS_VREDRAW;
// *窗体回调函数
wcex.lpfnWndProc = (WNDPROC)WndProc;
// 窗体类额外字节数,通常为0
wcex.cbClsExtra = 0;
// 窗体实例额外字节数,通常为0
wcex.cbWndExtra = 0;
// *应用程序实例句柄
wcex.hInstance = hInstance;
wcex.hIcon = NULL; // 窗体大图标
wcex.hCursor = LoadCursor(NULL, IDC_ARROW); // 窗体鼠标光标样式
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // 窗体背景色
wcex.lpszMenuName = NULL; // 窗体主菜单
// *窗体类名称
wcex.lpszClassName = "FW";
wcex.hIconSm = NULL; // 窗体小图标

//2、注册窗体
RegisterClassEx(&wcex);

//3、创建窗体
HWND hWnd = CreateWindow(
"FW", // *窗体类名称
"指针时钟", // 窗体标题名
WS_OVERLAPPEDWINDOW, // 窗体外观样式
600, // 窗体在屏幕上的水平位置
100, // 窗体在屏幕上的垂直位置
600, // 窗口的宽度
600, // 窗口的高度
NULL, // 父窗体句柄
NULL, // 窗口菜单句柄
hInstance, // *创建窗体的应用程序实例句柄
NULL); // 创建窗体时的额外信息,通常为NULL

if (NULL == hWnd)
{
return FALSE;
}

//4、显示窗体
ShowWindow(hWnd, nShowCmd);

//5、 更新窗体
UpdateWindow(hWnd);

//6、主消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) // 从消息队列中获取消息
{
TranslateMessage(&msg); // 转换消息
DispatchMessage(&msg); // 分发消息给回调函数
}

return msg.wParam;

}




//7、消息处理
long CALLBACK WndProc(HWND hWnd, int message, int wParam, int lParam)
{

switch (message)
{
case WM_CREATE:
{

::SetTimer(hWnd,1,1000,NULL);//设置定时器,定时器必须在窗体创建时设置
break;
}
case WM_TIMER:
{
HDC hDc=GetDC(hWnd);//申请绘图设备
HPEN hPen=CreatePen(PS_SOLID,9,RGB(155,145,231));//创建画笔
SelectObject(hDc,hPen);//选入设备上下文
Ellipse(hDc,100,100,400,400);//画圆
for(int i=0;i<=60;i+=5)//画表盘
{
s1=x+(int)(r*cos(i*PI/30-PI/2));
s2=y+(int)(r*sin(i*PI/30-PI/2));
char s[3];
sprintf(s,"%d",i/5);
TextOut(hDc,s1-7,s2-7,s,strlen(s));
}
DeleteObject(hPen);//释放绘图设备

ss++;
if(ss==60)
{
ss=0;
mm++;
if(mm%12==0)
{
hh++;
}
if(mm==60)
{
mm=0;
}
}
//秒针的坐标
sx=x+(int)(sr*cos(ss*PI/30-PI/2));
sy=y+(int)(sr*sin(ss*PI/30-PI/2));
//分针的坐标
mx=x+(int)(mr*cos(mm*PI/30-PI/2));
my=y+(int)(mr*sin(mm*PI/30-PI/2));
//时针的坐标
hx=x+(int)(hr*cos(hh*PI/30-PI/2));
hy=y+(int)(hr*sin(hh*PI/30-PI/2));

hPen=CreatePen(PS_SOLID,5,RGB(255,0,0));
SelectObject(hDc,hPen);
MoveToEx(hDc,x,y,NULL);
LineTo(hDc,sx,sy);
DeleteObject(hPen);
hPen=CreatePen(PS_SOLID,5,RGB(0,145,0));
SelectObject(hDc,hPen);
MoveToEx(hDc,x,y,NULL);
LineTo(hDc,mx,my);
DeleteObject(hPen);
hPen=CreatePen(PS_SOLID,5,RGB(15,12,12));
SelectObject(hDc,hPen);
MoveToEx(hDc,x,y,NULL);
LineTo(hDc,hx,hy);
DeleteObject(hPen);

ReleaseDC(hWnd,hDc);
break;
}
case WM_DESTROY:
{
PostQuitMessage(0);
KillTimer(hWnd,1);//销毁定时器
break;
}
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
...全文
98 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2011-04-28
  • 打赏
  • 举报
回复
取时间的方法,前面几位都说了一下,楼主可以去试试。

关于画图方面的问题,请参考这篇文章:
http://blog.163.com/embeded-life/blog/static/105932519200922462519816/
eye_119_eye 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pathuang68 的回复:]
引用 5 楼 zhao4zhong1 的回复:

绘图代码应放在PAINT消息处理中


++

楼主那样写,画出来后,只要有其他窗口一覆盖,图形就没了,不能重画。
[/Quote]
++
pathuang68 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhao4zhong1 的回复:]

绘图代码应放在PAINT消息处理中
[/Quote]

++

楼主那样写,画出来后,只要有其他窗口一覆盖,图形就没了,不能重画。
赵4老师 2011-04-28
  • 打赏
  • 举报
回复
绘图代码应放在PAINT消息处理中
calven_2521 2011-04-28
  • 打赏
  • 举报
回复
struct tm timeloc;
memcpy(&timeloc,localtime(&time),sizeof(timeloc));
int locTime = ((timeloc.tm_year+1900)*100+timeloc.tm_mon+1)*100+timeloc.tm_mday;
GARY 2011-04-28
  • 打赏
  • 举报
回复
swprintf(buffer, _T("%04d-%02d-%02d"), st.wYear, st.wMonth, st.wDay);
GARY 2011-04-28
  • 打赏
  • 举报
回复
SYSTEMTIME st;
GetLocalTime(&st);
toadzw 2011-04-28
  • 打赏
  • 举报
回复
/*
取系统当前时间并能字符形式返回到字符串中
*/
int GetCurrentDayAndTime(char *szCurrentDayTime)
{
struct tm * tt;
time_t clock;

time(&clock);
tt = localtime(&clock);

sprintf(szCurrentDayTime,"%04d%02d%02d%02d%02d%02d",(tt->tm_year)+1900,(tt->tm_mon)+1,(tt->tm_mday), (tt->tm_hour),(tt->tm_min),(tt->tm_sec));

return 0;
}

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧