#include <windows.h>
LRESULT CALLBACK WinProc(HWND,UINT,WPARAM,LPARAM);
inline void GetData(void);
UINT minute,hour=0;
int font_size; //字体大小
int window_width; //窗口宽度
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
//数据初始化
font_size = GetSystemMetrics(SM_CYSCREEN)/30; //字体大小是屏幕高度除以30
window_width=font_size*6; //窗口宽度是字体大小的6倍
GetData();
//创建窗口
WNDCLASS wc;
wc.style=CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc=(WNDPROC)WinProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName="MyWindow";
RegisterClass(&wc); //WS_EX_TOOLWINDOW风格可以使得不在任务栏上显示
HWND hwnd=CreateWindowEx(WS_EX_TOOLWINDOW,"MyWindow","My Window",WS_POPUP,//==比=的优先级高,一定要打括号
GetSystemMetrics(SM_CXSCREEN)-window_width,//初始窗口左上角X坐标
10, //初始窗口左上角Y坐标
//500,500,
window_width, //窗口宽度
100, //窗口高度
NULL,NULL,hInstance,NULL);
if(!hwnd) return false;
//增加窗口透明属性。
LONG l = GetWindowLong(hwnd,GWL_EXSTYLE);
SetWindowLong(hwnd,GWL_EXSTYLE,l^0x00080000);
//动态调用SetLayeredWindowAttributes,使窗口透明
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun) fun(hwnd,RGB(255,255,255),50,1);
FreeLibrary(hInst);
}
//显示窗口,进入消息循环
ShowWindow(hwnd,nShowCmd);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WinProc(HWND h,UINT msg,WPARAM wParam,LPARAM lParam)
{ HDC hdc;
PAINTSTRUCT ps;
RECT rect;
HFONT hFont;
char str[20];
switch(msg)
{
case WM_CREATE:
SetTimer(h,0,60000,NULL); //设置定时器60秒
return 0;
case WM_TIMER:
GetData();
InvalidateRect(h,NULL,false);
case WM_LBUTTONDOWN: //左键按下
PostMessage(h,WM_NCLBUTTONDOWN,HTCAPTION,lParam);
return 0;
case WM_PAINT:
hdc=BeginPaint(h,&ps);
GetClientRect(h,&rect);
hFont = CreateFont(font_size,0,0,0,FW_NORMAL,
0,0,0,
DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH,NULL);
SetTextColor(hdc,RGB(0,255,0));
/*if(hour<4) SetTextColor(hdc,RGB(0,255,0));
else if(hour>=4 && hour<8) SetTextColor(hdc,RGB(0,0,255));
else SetTextColor(hdc,RGB(255,0,0));
*/
SelectObject(hdc,hFont);
wsprintf(str,"%02d:%02d",hour,minute);
DrawText(hdc,str,-1,&rect,DT_LEFT);
DeleteObject(hFont);
EndPaint(h,&ps);
return 0;
case WM_KEYDOWN:
if(wParam==VK_ESCAPE){//按ESC键退出
KillTimer(h,0);
PostQuitMessage(0);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(h,msg,wParam,lParam);
}
inline void GetData()
{
DWORD d = GetTickCount()/1000; //从操作系统启动到现在所经过秒数
hour=d/3600;
minute=(d-hour*3600)/60;
}
网吧专用计时器
最新推荐文章于 2022-08-05 22:06:52 发布