#include
#include
#include
#include //使用_sprintf格式化需要
static TCHAR szText[] = TEXT("欢迎欢迎");
HWND hwnd;
static TCHAR times[32];
void GetSysTime(){
time_t tt = time(NULL);
tm* t = localtime(&tt);
_stprintf(times,"%d-%02d-%02d %02d:%02d:%02d",
t->tm_year+1900,
t->tm_mon+1,
t->tm_mday,
t->tm_hour,
t->tm_min,
t->tm_sec);
printf("%02d\n",t->tm_sec);
}
void CALLBACK TimerProc(HWND hwnd, UINT uMsg,UINT idEvent,DWORD dwTime){
//printf("entertimerproc \n");
//PostMessage(hwnd,WM_PAINT,0,0);
//GetSysTime();
}
/处理消息函数
CALLBACK 即 stdcall 即WIN API调用约定
另cdecl C语言调用约定/
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
HDC hdc; /设备环境句柄/
PAINTSTRUCT ps; /* 存储绘图环境的相关信息 */
switch(Message) {
case WM_CREATE:{
//SetTimer(NULL,100,1000,TimerProc);
SetTimer(hwnd, 100,1000,NULL);
break;
}
/* 窗口关闭销毁消息 */
case WM_DESTROY: {
KillTimer(hwnd,100);
PostQuitMessage(0); /* 发送WM_QUIT消息 */
break;
}
case WM_TIMER:{
//printf("TIME message\n");
RECT rect;
GetClientRect(hwnd,&rect);
InvalidateRect(hwnd,&rect,true); //窗口失效重绘
break;
}
case WM_PAINT:{
//printf("repaint");
hdc = BeginPaint(hwnd,&ps); /* 开始绘图并返回环境句柄 */
GetSysTime();
//TextOut(hdc,50,50,szText,_tcslen(szText));
TextOut(hdc,50,50,times,_tcslen(times)); //输出文字
EndPaint(hwnd,&ps); /*结束绘图并释放环境句柄*/
break;
}
/* 默认处理消息 */
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
/Windows应用程序入口/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
AllocConsole();
freopen("CONOUT$","w",stdout);
WNDCLASSEX wc; /* 窗口类对象 */
//HWND hwnd; /* 窗口句柄 */
MSG msg; /* 消息结构体对象 */
static TCHAR szAppName[] = TEXT("WindowClass"); /* 使用TCHAR和TEXT宏可以自动适应UNICODE和ASCII字符串,如果是UNICODE设置则是宽字符串,反之是ASCII字符串*/
/* 初始化窗口类对象 */
memset(&wc,0,sizeof(wc));
/* 或者用下面初始化结构体对象 */
/* WNDCLASSEX wc = {}; */
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc; /* 消息回调函数指针 */
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW); /* 鼠标光标句柄 */
wc.style = CS_HREDRAW | CS_VREDRAW; /* 窗口类风格,水平或垂直移动刷新窗口 */
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); /* 窗口背景画刷,设置为白色 */
wc.lpszClassName = szAppName; /* 窗口类的名称 */
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* 应用程序图标句柄 */
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* 窗口标题栏图标句柄 */
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, TEXT("窗口注册失败!"),TEXT("错误!"),MB_ICONEXCLAMATION|MB_OK);
return 0;
}
/*
CreateWindowEx函数作用是创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口。
其函数声明如下:
HWND CreateWindowEx(
DWORD dwExStyle, //窗口的扩展风格
LPCTSTR lpClassName, //已经注册的窗口类名称
LPCTSTR lpWindowName, //窗口标题栏的名字
DWORD dwStyle, //窗口的基本风格
int x, //窗口左上角水平坐标位置
int y, //窗口左上角垂直坐标位置
int nWidth, //窗口的宽度
int nHeight, //窗口的高度
HWND hWndParent, //窗口的父窗口句柄
HMENU hMenu, //窗口菜单句柄
HINSTANCE hInstance, //应用程序实例句柄
LPVOID lpParam, //窗口创建时附加参数
); //创建成功返回窗口句柄
*/
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, /* 指定窗口有一个带阴影的边界 */
szAppName, /* 注册的窗口类名 */
TEXT("Dev窗口"), /* 窗口标题 */
WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL, /* 窗口风格具有水平与垂直滚动条 */
CW_USEDEFAULT, /* x */
CW_USEDEFAULT, /* y */
640, /* 宽 */
480, /* 高 */
NULL, /* 父窗口句柄 */
NULL, /* 菜单或子窗口句柄 */
hInstance, /* 应用程序实例句柄 */
NULL); /* 附加数据 */
if(hwnd == NULL) {
MessageBox(NULL, TEXT("窗口创建失败!"),TEXT("错误!"),MB_ICONEXCLAMATION|MB_OK); /* 带感叹号图标消息框 */
return 0;
}
ShowWindow(hwnd,SW_SHOW); /* 显示窗口 */
UpdateWindow(hwnd); /* 发送WM_PAINT消息 */
/*
消息循环
*/
while(GetMessage(&msg, NULL, 0, 0) > 0) { /* 如收到WM_QUIT消息GetMessage返回0,退出消息循环 */
TranslateMessage(&msg); /* 转化按键消息为WM_CHAR消息 */
DispatchMessage(&msg); /* 将消息传给窗口回调函数处理 */
}
return msg.wParam;
}