第八章 计时器(DIGCLOCK)
- /*--------------------------------------
- DIGCLOCK.C -- Digital Clock
- (c) Charles Petzold, 1998
- --------------------------------------*/
- #include <Windows.h>
- #define ID_TIMER 1
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- int WINAPI WinMain( __in HINSTANCE hInstance
- , __in_opt HINSTANCE hPrevInstance
- , __in LPSTR lpCmdLine
- , __in int nShowCmd )
- {
- static TCHAR szAppName[] = TEXT("DigClock");
- HWND hwnd;
- MSG msg;
- WNDCLASS wndclass;
- wndclass.style = CS_HREDRAW | CS_VREDRAW;
- wndclass.lpfnWndProc = WndProc;
- wndclass.cbClsExtra = ;
- wndclass.cbWndExtra = ;
- wndclass.hInstance = hInstance;
- wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
- wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
- wndclass.lpszMenuName = NULL;
- wndclass.lpszClassName = szAppName;
- if (!RegisterClass(&wndclass))
- {
- MessageBox(NULL, TEXT("Program requires Windows NT!")
- , szAppName, MB_ICONERROR);
- return ;
- }
- hwnd = CreateWindow(szAppName, TEXT("Digital Clock")
- , WS_OVERLAPPEDWINDOW
- , CW_USEDEFAULT, CW_USEDEFAULT
- , CW_USEDEFAULT, CW_USEDEFAULT
- , NULL, NULL, hInstance, NULL);
- ShowWindow(hwnd, nShowCmd);
- UpdateWindow(hwnd);
- while (GetMessage(&msg, NULL, , ))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return msg.wParam;
- }
- void DisplayDigit(HDC hdc, int iNumber)
- {
- static BOOL fSevenSegment[][] =
- {
- , , , , , , , //
- , , , , , , , //
- , , , , , , , //
- , , , , , , , //
- , , , , , , , //
- , , , , , , , //
- , , , , , , , //
- , , , , , , , //
- , , , , , , , //
- , , , , , , //
- };
- static POINT ptSegment[][] =
- {
- , , , , , , , , , , , ,
- , , , , , , , , , , , ,
- , , , , , , , , , , , ,
- , , , , , , , , , , , ,
- , , , , , , , , , , , ,
- , , , , , , , , , , , ,
- , , , , , , , , , , ,
- };
- for (int iSeg(); iSeg != ; ++iSeg)
- {
- if (fSevenSegment[iNumber][iSeg])
- Polygon(hdc, ptSegment[iSeg], );
- }
- }
- void DisplayTwoDigits(HDC hdc, int iNumber, BOOL fSuppress)
- {
- if (!fSuppress || (iNumber / != ))
- DisplayDigit(hdc, iNumber / );
- OffsetWindowOrgEx(hdc, -, , NULL);
- DisplayDigit(hdc, iNumber % );
- OffsetWindowOrgEx(hdc, -, , NULL);
- }
- void DisplayColon(HDC hdc)
- {
- POINT ptColon[][] = { , , , , , , , ,
- , , , , , , , };
- Polygon(hdc, ptColon[], );
- Polygon(hdc, ptColon[], );
- OffsetWindowOrgEx(hdc, -, , NULL);
- }
- void DisplayTime(HDC hdc, BOOL f24Hour, BOOL fSuppress)
- {
- SYSTEMTIME st;
- GetLocalTime(&st);
- if (f24Hour)
- DisplayTwoDigits(hdc, st.wHour, fSuppress);
- else
- DisplayTwoDigits(hdc, (st.wHour %= ) ? st.wHour : , fSuppress);
- DisplayColon(hdc);
- DisplayTwoDigits(hdc, st.wMinute, FALSE);
- DisplayColon(hdc);
- DisplayTwoDigits(hdc, st.wSecond, FALSE);
- }
- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- static BOOL f24Hour, fSuppress;
- static HBRUSH hBrushRed;
- static int cxClient, cyClient;
- HDC hdc;
- PAINTSTRUCT ps;
- TCHAR szBuffer[];
- switch (message)
- {
- case WM_CREATE:
- hBrushRed = CreateSolidBrush(RGB(, , ));
- SetTimer(hwnd, ID_TIMER, , NULL);
- //fall through
- case WM_SETTINGCHANGE:
- GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ITIME, szBuffer, );
- f24Hour = (szBuffer[] == TEXT(''));
- GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ITLZERO, szBuffer, );
- fSuppress = (szBuffer[] == TEXT(''));
- InvalidateRect(hwnd, NULL, TRUE);
- return ;
- case WM_SIZE:
- cxClient = LOWORD(lParam);
- cyClient = HIWORD(lParam);
- return ;
- case WM_TIMER:
- InvalidateRect(hwnd, NULL, TRUE);
- return ;
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
- SetMapMode(hdc, MM_ISOTROPIC);
- SetWindowExtEx(hdc, , , NULL);
- SetViewportExtEx(hdc, cxClient, cyClient, NULL);
- SetWindowOrgEx(hdc, , , NULL);
- SetViewportOrgEx(hdc, cxClient / , cyClient / , NULL);
- SelectObject(hdc, GetStockObject(NULL_PEN));
- SelectObject(hdc, hBrushRed);
- DisplayTime(hdc, f24Hour, fSuppress);
- EndPaint(hwnd, &ps);
- return ;
- case WM_DESTROY:
- KillTimer(hwnd, ID_TIMER);
- DeleteObject(hBrushRed);
- PostQuitMessage();
- return ;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
DIGCLOCK.C
第八章 计时器(DIGCLOCK)的更多相关文章
- 第八章 计时器(BEEPER1)
*------------------------------------- BEEPER1.C -- Timer Demo Program No. (c) Charles Petzold, ---- ...
- 第八章 计时器(BEEPER2)
/*------------------------------------- BEEPER2.C -- Timer Demo Program No.1 (c) Charles Petzold, 19 ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- android 两种实现计时器时分秒的实现,把时间放在你的手中~
可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲 ...
- TCP四种计时器
TCP共使用以下四种计时器,即重传计时器.坚持计时器.保活计时器和时间等待计时器 .这几个计时器的主要特点如下: 1.重传计时器 当TCP发送报文段时,就创建该特定报文段的重传计时 ...
- C# - 计时器Timer
System.Timers.Timer 服务器计时器,允许指定在应用程序中引发事件的重复时间间隔. using System.Timers: // 在应用程序中生成定期事件 public class ...
- JavaScript学习笔记5 之 计时器 & scroll、offset、client系列属性 & 图片无缝滚动
一.计时器 setInterval ( 函数/名称 , 毫秒数 )表示每经过一定的毫秒后,执行一次相应的函数(重复) setTimeout ( 函数/名称 , 毫秒数 ) 表示经过一定的毫秒后,只执行 ...
- 精通Web Analytics 2.0 (10) 第八章:竞争情报分析
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第八章:竞争情报分析 在现实世界中,收集竞争情报可能意味着雇人在竞争对手的垃圾桶(实际会发生!)翻找. 在虚拟世界中,堆如山的数 ...
- VBA中使用计时器的两种方法
'================================ ' VBA采用Application.OnTime实现计时器 ' ' http://www.cnhup.com '========= ...
随机推荐
- vue 2.x之组件的数据传递(一)
这是根据官方提供的脚手架vue-cli搭建,通过简单的案例来介绍vue数据的传递的方式,根据自己平时用到的,来做简单的总结: 1.父组件传递数据给子组件 父组件传递数据给子组件,需要把子组件引入,并挂 ...
- 牛客网剑指offer java 全部题解
经过数月的努力,终于更完了牛客网的66道剑指offer,以下的顺序和大家在牛客网的顺序是一样的(排序也花了不少时间),希望对大家找工作/提高算法能力能起到些许帮助. 每天一道剑指offer-二维数组中 ...
- [转]wx.getUserInfo(OBJECT) 微信小程序 获取用户信息
本文转自:http://mp.weixin.qq.com/debug/wxadoc/dev/api/open.html wx.getUserInfo(OBJECT) 获取用户信息,withCreden ...
- chrome 等浏览器不支持本地ajax请求的问题
chrome 等浏览器不支持本地ajax请求的问题 XMLHttpRequest cannot load file:///D:/WWW/angularlx/ui-router-test/templat ...
- C# list的合并
转自:https://www.cnblogs.com/liguanghui/archive/2011/11/09/2242309.html List<int> listA = new Li ...
- Myeclipse安装与破解
安装包+破解包 链接:https://pan.baidu.com/s/1G4mYsTOMDixyr2UmdqqY5A 提取码:a2n8 红色框框内的是安装包,蓝色框框内的是破解包 安装过程中比较简单, ...
- ZAB 算法
ZAB (Zookeeper Atomic Broadcast ) zookeeper原子消息广播协议 保证:分布式数据一致性 所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器被称为 ...
- 设计模式--单例模式(学习Learning hard大神笔记实践)
根据大神博客园中的文章,自己亲手敲了一遍,对每个解说点都自己动手进行实践,收获颇丰,谢谢Learning hard大神,原文地址http://www.cnblogs.com/zhili/p/Desig ...
- Leet Palindrome Partitioning II
class Solution { public: int minCut(string s) { int len = s.length(); ]; char* s_dp = new char[len * ...
- 说说HTML5中label标签的可访问性问题——张鑫旭
一.开篇叨叨 一般稍微有些经验的页面制作人员都知道label标签可以优雅地扩大表单控件元素的点击区域,例如,单纯的单选框点击区域就鼻屎那么大的地方,经常会点不到位置.因此,label标签的使用对于提高 ...