网吧专用计时器

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值