好玩的Windows编程之"本地时间"(1)binaryclock
来源:互联网 发布:APP登录HTML源码 编辑:程序博客网 时间:2024/04/30 01:30
(源码下载页面)
//程序名:方块时钟/binaryclock//作者wisepragma//主页:http://blog.csdn.net/wisepragma//taskkill /im binaryclock.exe //cl binaryclock.cpp//注释掉#define LENGTH 15然后编译时指定宏/DLENGTH=15//CL binaryclock.CPP /DLENGTH=15#include <windows.h>#include <time.h>#pragma comment(lib,"user32.lib")#pragma comment(lib,"gdi32.lib")#pragma comment(lib,"kernel32.lib")//////////////////////////////////////////#define LENGTH 15//20//10//100//方块边长#define DX 1//方块间横向间隔#define DY 1//方块间纵向间隔int cwidth=LENGTH*6+1+DX*5;//窗体的宽int cheight=LENGTH*4+1+DY*3;//窗体的高 //////////////////////////////////////////struct XTIME{int hour,minute,second;//时分秒};struct QUAD{ RGBTRIPLE m_color;//方块色彩 bool m_bPaint;//是否显示};QUAD quad[6][4];//定义时间方格//////////////////////////////////////////void rand_color(void)//随机色彩{ for(int m=0;m<6;m++) { for(int n=0;n<4;n++) {quad[m][n].m_color.rgbtRed=rand()%255;quad[m][n].m_color.rgbtGreen=rand()%255;quad[m][n].m_color.rgbtBlue=rand()%255; } }}void rand_color_hour(void)//随机色彩{ for(int m=0;m<=1;m++) { for(int n=0;n<4;n++) {quad[m][n].m_color.rgbtRed=rand()%255;quad[m][n].m_color.rgbtGreen=rand()%255;quad[m][n].m_color.rgbtBlue=rand()%255; } }}void rand_color_minute(void)//随机色彩{ for(int m=2;m<=3;m++) { for(int n=0;n<4;n++) {quad[m][n].m_color.rgbtRed=rand()%255;quad[m][n].m_color.rgbtGreen=rand()%255;quad[m][n].m_color.rgbtBlue=rand()%255; } }}void rand_color_second(void)//随机色彩{ for(int m=4;m<=5;m++) { for(int n=0;n<4;n++) {quad[m][n].m_color.rgbtRed=rand()%255;quad[m][n].m_color.rgbtGreen=rand()%255;quad[m][n].m_color.rgbtBlue=rand()%255; } }}LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){HANDLE hMutex=CreateMutex(NULL,FALSE,TEXT("Only One Instance"));if( hMutex==NULL ||ERROR_ALREADY_EXISTS==GetLastError() ) return 0;static char *szAppName = TEXT("binaryclock");MSG msg;HWND hwnd;WNDCLASSEX wndclass; wndclass.cbSize = sizeof (wndclass);wndclass.style = CS_HREDRAW | CS_VREDRAW;wndclass.lpfnWndProc = WndProc;wndclass.cbClsExtra = 0;wndclass.cbWndExtra = 0;wndclass.hInstance = hInstance;wndclass.hIcon = LoadIcon (NULL,LPCTSTR(100));wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);wndclass.hbrBackground =(HBRUSH)CreateSolidBrush(RGB(255,255,255));wndclass.lpszMenuName = 0;wndclass.lpszClassName = szAppName;wndclass.hIconSm = wndclass.hIcon;RegisterClassEx (&wndclass);hwnd = CreateWindowEx (WS_EX_TOPMOST|WS_EX_TOOLWINDOW,szAppName,szAppName,WS_POPUPWINDOW,GetSystemMetrics(SM_CXSCREEN)-cwidth-10, GetSystemMetrics(SM_CYSCREEN)-cheight-40,cwidth, cheight,NULL, NULL, hInstance, NULL);ShowWindow (hwnd,SW_SHOWNORMAL);UpdateWindow (hwnd);while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg);DispatchMessage (&msg);}return msg.wParam;}LRESULT CALLBACK WndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ static XTIME old_time,t0,t10;//old_time前一次时间,t0时间的个位,t10时间的十位 static SYSTEMTIME current_time; static HBRUSH hb; static HPEN hp; static HDC hdc; switch (uMsg){case WM_CREATE : {srand( (unsigned)time( NULL ) );memset(&quad,1,sizeof(quad));memset(¤t_time,0,sizeof(current_time));rand_color();SetTimer(hwnd,WM_NULL,100,NULL);GetLocalTime(¤t_time);return 0;}case WM_TIMER://SetTimer()定时每隔100毫秒更新一次时间{//old_time.second,old_time.minute,old_time.hour是旧的时间 old_time.second=current_time.wSecond; old_time.minute=current_time.wMinute; old_time.hour=current_time.wHour; GetLocalTime(¤t_time);//取得当前最新时间 if(old_time.minute!=current_time.wMinute)rand_color_minute();//分钟变化时改变分钟颜色 if(old_time.hour!=current_time.wHour)rand_color_hour();//小时变化时改变小时颜色 if( (old_time.second/10)!=(current_time.wSecond/10) )rand_color_second();//十秒钟变化时改变秒钟颜色 //s,m,h,ss,mm,hh,用于取得数值的模填入quad的m_bPaint中,为1者显示,为0者不显示 t0.second=current_time.wSecond%10;t10.second=current_time.wSecond/10;//秒钟:求余取得个位数字t0.second,求商取得十位字t10.second,下同 t0.minute=current_time.wMinute%10;t10.minute=current_time.wMinute/10; t0.hour=current_time.wHour%10;t10.hour=current_time.wHour/10; for(int n=0;n<4;n++)//按时间的数值,求与依次填入框格中 { quad[5][3-n].m_bPaint=(t0.second>>n)&1; quad[4][3-n].m_bPaint=(t10.second>>n)&1; quad[3][3-n].m_bPaint=(t0.minute>>n)&1; quad[2][3-n].m_bPaint=(t10.minute>>n)&1; quad[1][3-n].m_bPaint=(t0.hour>>n)&1; quad[0][3-n].m_bPaint=(t10.hour>>n)&1; } InvalidateRect(hwnd,NULL,0);//立即刷新整个窗口,即触发WM_PAINT消息 break;}case WM_PAINT:{ hdc=GetDC(hwnd); for(int m=0;m<6;m++) { for(int n=0;n<4;n++) { if(quad[m][n].m_bPaint)//位为1的用彩色画刷 { BYTE r,g,b; r=quad[m][n].m_color.rgbtRed; g=quad[m][n].m_color.rgbtGreen; b=quad[m][n].m_color.rgbtBlue; hb=CreateSolidBrush(RGB(r,g,b)); hp=CreatePen(PS_INSIDEFRAME,1,RGB(0,0,0)); } else {//位为0的用白色画刷hb=(HBRUSH)GetStockObject(WHITE_BRUSH);//hp=CreatePen(PS_INSIDEFRAME,1,RGB(0,0,0));//黑//hp=CreatePen(PS_INSIDEFRAME,1,RGB(255,255,255));//白hp=CreatePen(PS_INSIDEFRAME,1,RGB(215,215,215));//灰色 }SelectObject(hdc,hp);SelectObject(hdc,hb);Rectangle(hdc,m*(LENGTH+DX),n*(LENGTH+DY),m*(LENGTH+DX)+LENGTH,n*(LENGTH+DY)+LENGTH);DeleteObject(hp);DeleteObject(hb); } } ReleaseDC(hwnd,hdc); break;}case WM_LBUTTONDOWN://拖拽窗口SendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,lParam);return 0;case WM_COMMAND :break;case WM_KEYDOWN: if(wParam==VK_ESCAPE) PostQuitMessage (0); //ESC键退出 break;case WM_DESTROY:PostQuitMessage (0);return 0;}return DefWindowProc (hwnd, uMsg, wParam, lParam);}
0 0
- 好玩的Windows编程之"本地时间"(1)binaryclock
- 好玩的Windows编程之"本地时间"
- 好玩的Windows编程之"本地时间"(2)TextClock
- 好玩的Windows编程之"本地时间"(3) BigBen
- 好玩的时间控件
- 好玩的python时间
- Windows编程之时间
- windows编程:获取本地时间代码
- perl好玩的编程1:随机数生成
- 好玩的程序,有时间调一调
- 一个比较好玩的时间展示
- Windows平台下一些好玩的技巧
- [好玩]六年编程经验的程序员
- 木马编程,一些好玩的程序
- Manufactoria:非常好玩的自动机编程游戏
- windows driver 获取本地时间
- 好玩的CSS属性之Selection
- 时间编程 --localtime(获取本地时间)
- 公布13年年报的股票中,个人进入前十大流通股东的股东一览。 截止2014年03月13日
- Solr4.7从数据库导数据
- tornado singleton单例模式
- 断线的风筝
- Java中的反射的应用
- 好玩的Windows编程之"本地时间"(1)binaryclock
- MyBatis入门实例简介
- c++重拾的记忆
- C#委托与代理
- 第七章代码
- 函数指针的一些小理解
- Provider-Defined Properties in DBPROPSET_JETOLEDB_DBINIT
- PPT单一对象设置多个动作、多个对象设置同一动作
- 第七章代码2