/*--------------------------------------
CLOCK.C -- Analog Clock Program
(c) Charles Petzold, 1998
--------------------------------------*/
#include <windows.h>
#include <math.h>
#define ID_TIMER
1
#define TWOPI
(2 * 3.14159
)
LRESULT CALLBACK WndProc
(HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain
(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT
("Clock
") ;
HWND hwnd;
MSG msg;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW
| CS_VREDRAW
;
wndclass.lpfnWndProc = WndProc
;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = NULL ;
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 0 ;
}
hwnd = CreateWindow
(szAppName, TEXT ("Analog Clock
"),
WS_OVERLAPPEDWINDOW
,
CW_USEDEFAULT
, CW_USEDEFAULT
,
CW_USEDEFAULT
, CW_USEDEFAULT
,
NULL, NULL, hInstance, NULL) ;
ShowWindow
(hwnd, iCmdShow) ;
UpdateWindow
(hwnd) ;
while (GetMessage
(&msg, NULL, 0, 0))
{
TranslateMessage
(&msg) ;
DispatchMessage
(&msg) ;
}
return msg.wParam ;
}
void SetIsotropic
(HDC hdc, int cxClient, int cyClient)
{ //使用同方向性映像模式
SetMapMode
(hdc, MM_ISOTROPIC
) ;
//设置逻辑范围为1000,1000
SetWindowExtEx
(hdc, 1000, 1000, NULL) ;
//设置设备范围
SetViewportExtEx
(hdc, cxClient / 2, -cyClient / 2, NULL) ;
//设置设备原点为窗口中央。
SetViewportOrgEx
(hdc, cxClient / 2, cyClient / 2, NULL) ;
//该函数设定映像方式为 四象限笛卡尔坐标系 。
//从窗口中心点开始,左-X ,右+X ,上+Y ,下-Y 。
}
void RotatePoint
(POINT pt[], int iNum, int iAngle)
{
int i ;
POINT ptTemp ;
for (i = 0 ; i < iNum ; i++)
{
//TWOPI * iAngle / 360 转换角度为弧度。
//Cos()=X/R X坐标在半径中的比例
//Sin() =Y/R Y坐标在半径中的比例
//该算法实现:将始边设为+Y轴,旋转方向为顺时针
ptTemp.x = (int) (pt[i].x * cos
(TWOPI
* iAngle / 360) +
pt[i].y * sin
(TWOPI
* iAngle / 360)) ;
ptTemp.y = (int) (pt[i].y * cos
(TWOPI
* iAngle / 360) -
pt[i].x * sin
(TWOPI
* iAngle / 360)) ;
pt[i] = ptTemp ;
}
}
void DrawClock
(HDC hdc)
{
int iAngle ;
POINT pt[3] ;
for (iAngle = 0 ; iAngle < 360 ; iAngle += 6)
{
pt[0].x = 0 ;
pt[0].y = 900 ; //矩形中心点
RotatePoint
(pt, 1, iAngle) ; //以6度为单位进行顺时针旋转
pt[2].x = pt[2].y = iAngle % 5 ? 33 : 100 ; //判断设置圆点大小,以5为间隔。
//假设要在12点画一个圆,圆大小为100.
//pt[0].x = 0 - (100/2) = -50 矩形左边
//pt[0].y = 900-(100/2) = 850 矩形顶边
//pt[1].x = -50 + 100 = 50 矩形右边
//pt[1].y = 850 + 100 = 950 矩形底边
pt[0].x -= pt[2].x / 2 ;
pt[0].y -= pt[2].y / 2 ;
pt[1].x = pt[0].x + pt[2].x ;
pt[1].y = pt[0].y + pt[2].y ;
SelectObject
(hdc, GetStockObject
(BLACK_BRUSH
)) ;
Ellipse
(hdc, pt[0].x, pt[0].y, pt[1].x, pt[1].y) ; //在给定矩形内画圆
}
}
void DrawHands
(HDC hdc, SYSTEMTIME * pst, BOOL fChange)
{
static POINT pt[3][5] = { 0, -150, 100, 0, 0, 600, -100, 0, 0, -150, //时针12点时多边形坐标
0, -200, 50, 0, 0, 800, -50, 0, 0, -200, //分针12点时多边形坐标
0, 0, 0, 0, 0, 0, 0, 0, 0, 800 } ; //秒针12点时绘画坐标
int i, iAngle[3] ;
POINT ptTemp[3][5] ;
iAngle[0] = (pst->wHour * 30) % 360 + pst->wMinute / 2 ; //时针在坐标系里的对应角度
iAngle[1] = pst->wMinute * 6 ; //分针角度
iAngle[2] = pst->wSecond * 6 ; //秒针角度
memcpy
(ptTemp, pt, sizeof (pt)) ; //复制画笔坐标到临时数组
for (i = fChange ? 0 : 2 ; i < 3 ; i++) //如果小时或分钟更改,i=0,否者等于2(意思是只画秒针)。
{
RotatePoint
(ptTemp[i], 5, iAngle[i]) ; //根据角度,计算顺时针旋转后的坐标
Polyline
(hdc, ptTemp[i], 5) ; //根据旋转后的坐标,画多边形(表针)
}
}
LRESULT CALLBACK WndProc
(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxClient, cyClient ;
static SYSTEMTIME stPrevious ;
BOOL fChange ;
HDC hdc ;
PAINTSTRUCT ps ;
SYSTEMTIME st ;
switch (message)
{
case WM_CREATE
:
SetTimer
(hwnd, ID_TIMER, 1000, NULL) ;
GetLocalTime
(&st) ; //获取系统当前时间信息
stPrevious = st ; //保存窗口创建时的时间信息
return 0 ;
case WM_SIZE
:
cxClient = LOWORD
(lParam) ;
cyClient = HIWORD
(lParam) ;
return 0 ;
case WM_TIMER
:
GetLocalTime
(&st) ;
//判断小时或者分钟,是否有更改。
fChange = st.wHour != stPrevious.wHour ||
st.wMinute != stPrevious.wMinute ;
hdc = GetDC
(hwnd) ;
SetIsotropic
(hdc, cxClient, cyClient) ;//该函数设定映像方式为 四象限笛卡尔坐标系 。
SelectObject
(hdc, GetStockObject
(WHITE_PEN)) ; //设置白色画笔
DrawHands
(hdc, &stPrevious, fChange) ; //涂抹掉之前的表针
SelectObject
(hdc, GetStockObject
(BLACK_PEN)) ; //设置黑色画笔
DrawHands
(hdc, &st, TRUE) ; //绘画当前表针
ReleaseDC
(hwnd, hdc) ;
stPrevious = st ; //保存时间信息,用于下次比较
return 0 ;
case WM_PAINT
:
hdc = BeginPaint
(hwnd, &ps) ;
SetIsotropic
(hdc, cxClient, cyClient) ; //该函数设定映像方式为 四象限笛卡尔坐标系。
DrawClock
(hdc) ; //绘画钟面圆点
DrawHands
(hdc, &stPrevious, TRUE) ; //绘画当前表针
EndPaint
(hwnd, &ps) ;
return 0 ;
case WM_DESTROY
:
KillTimer
(hwnd, ID_TIMER) ;
PostQuitMessage
(0) ;
return 0 ;
}
return DefWindowProc
(hwnd, message, wParam, lParam) ;
}
相关推荐
ESD 防护深度解析:模型、等级、系统设计与防护策略
本文系统阐述了静电放电(ESD)防护的核心技术体系。首先对比分析了HBM(人体模型)和CDM(充电设备模型)两种基础ESD模型的物理特性、测试标准及分级要求,指出相同电压下CDM的破坏性是HBM的15-20倍。其次详细解析了IEC61000-4-2系统级ESD标准,包括接触/空气放电测试方法及判定等级。重点提出了系统级防护的三层架构:空间隔离(≥10mm间距)、电气隔离(地平面分割)和TVS管选型(响应时间<1ns),并对比了MOV、SCR等防护器件特性。针对不同应用场景(消费电子、工业控制等)给出了差异化
《Windows程序设计-第二版》第四章最后一个04Clock大例子中的GDI句柄泄漏问题
用Sysinternals工具里的process explorer监控发现 GDI Handles在不断增加,大概是每秒增加2个。 检查原书代码: case WM_TIMER: { // Èç¹û´°¿Ú´¦ÓÚ×îС»¯×´Ì¬¾ÍʲôҲ²»×ö if(::IsIconic(hWnd)) // IsIconicº¯ÊýÓÃÀ´Åжϴ°¿ÚÊÇ·ñ´¦ÓÚ
Docker 磁盘占用过多问题处理过程记录
Docker 磁盘爆满问题处理
windows 程序设计之「SINEWAVE.C」范例分析笔记
实作正弦波wave波形音频并播放。wave函数的调用方法:waveOutOpen ;waveOutPrepareHeader ;waveOutWrite ;waveOutReset ;waveOutClose ;waveOutUnprepareHeader 。
逆变器技术解析:DDSRF双解耦在正负序分离中的关键作用
本文深入解析了DDSRF双解耦技术在逆变器正负序分离中的关键作用。通过建立正反旋转坐标系并利用交叉反馈解耦网络,DDSRF能快速、精准地分离电网电压中的正负序分量,从而显著提升锁相环在电网不平衡条件下的精度与系统稳定性,是现代高性能并网逆变器的核心算法之一。
异步FIFO的隐形陷阱:复位信号同步化实战解析
本文深入解析异步FIFO设计中复位信号同步化的隐形陷阱,重点分析赛灵思xpm_fifo_async原语在FPGA应用中的常见问题。通过实战代码和系统集成方案,提供复位同步化的最佳实践,帮助工程师避免跨时钟域通信故障,提升系统可靠性。
windows程序设计 「PopPad3」范例分析笔记
Open、Save、Find和Font通用对话框的使用。OPENFILENAME(Open) 、FINDREPLACE(Find & Replace) 、CHOOSEFONT(Font)结构简洁。
香橙派rk3588的rknn多线程推理RTSP流服务性能优化与资源分配策略
本文深入探讨了香橙派RK3588平台上的RKNN多线程推理在RTSP流服务中的性能优化与资源分配策略。通过分析硬件架构、设计多线程推理流水线、实现NPU核心负载均衡及优化RGA内存管理,显著提升了RTSP视频流的处理帧率和降低了延迟,为边缘计算视频分析应用提供了实用的优化方案。
Python爬虫学习笔记一:模拟登录(人工输入简单验证码)
# -*- coding: utf-8 -*-import requests, base64, refrom PIL import Imagefrom io import BytesIOdef logon(): loginUrl = 'http://############/login.do?method=enterbs' #登陆提交地址 imgUrl = 'http://#####...
R语言glm函数构建二分类logistic回归模型、epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值
R语言glm函数构建二分类logistic回归模型(family参数为binomial)、使用epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)
ADS基础教程24 - Gerber文件的导入
一、引言二、基本概念1.仿真文件下载2.仿真文件介绍二、导入步骤1.新建workspace2.选择Layout结构3.导入设计4.选择文件类型5.导入文件6.预览文件内容7.铜皮离散问题四、总结选择。通过本文章结束,可以了解ADS中如何将导入Gerber文件,并且对导入的铜皮进行合并。下一步就针对导入的文件进行层叠设置和编辑。END!}}END!
球的体积公式推导
设球的半径为R,将半径OA n等分,过这些等分点作平面,把半球切割成n层,每一层都是近似于圆柱形状的“小圆片”,这些“小圆片”的体积之和就是半球的体积。 由勾股定理可得第i层(由下向上数)“小圆片”的下底面半径: 于是,第i层“小圆片”的体积: 由于“小圆片”近似于圆柱形状,所以它的体积也近似于相应的圆柱的体积。它的高就是“小圆片”的厚度R/n,底面就是“小圆片”的下底面。 半
使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模
双机系统(Two-Machine System)是电力系统中用于研究动态稳定性和控制策略的一个典型模型。它由两台同步发电机通过输电网络相互连接,模拟实际电网中的互联操作。当发生短路故障时,系统的暂态稳定性会受到挑战,可能导致发电机失步或电压崩溃。本教程将带你使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模,并对其在短路故障条件下的暂态稳定性进行仿真和分析。
利用Windows画图设计Clock程序
学习windows 程序设计方面的知识,觉得还挺有意思。不仅加深了自己对window的了解,还了解了windows窗口与用户之间消息传递机制。 下面是学习过程中做的一个Clock的程序,有兴趣的可以参考一下:// ClockDemo.cpp : 定义应用程序的入口点。//#include "stdafx.h"#include "ClockDemo.h"
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
Windows程序设计第五版源代码---CLOCK
源代码如下: #include <windows.h> #include <math.h> #define ID_TIMER 1 #define TWOPI (2 * 3.14159) LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInsta...
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
Window Linux c 不同,C:Windows和其他操作系统中clock()的不同实现?
我必须为大学编写一个非常简单的控制台程序,该程序必须测量进行输入所需的时间。因此,我clock()在fgets()通话前后都使用了它。在我的Windows计算机上运行时,它运行完美。但是,当在我的朋友Mac-Book和Linux-PC上运行时,它给出的结果非常小(仅几微秒的时间)。我在所有3个操作系统上尝试了以下代码:#include #include #include void main(){c...
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
windwos程序设计里的clock程序,第八章
windows程序设计第五版这本书,不得不说,收获颇多,但越到后面也就越来越难,有时都觉得是不是自己太笨了,这个clock程序看了好久,终于弄懂了,先看一下程序运行的结果吧 代码里都有注释,就不多说了 # include<windows.h> # include<cmath># define ID_TIMER 1 # define TWOPI (2*3.14159)LRESULT CALLBAC
Windows程序设计零基础自学_7_定时器的使用
在Visual Basic里面可以利用Timer控件来实现定时的功能,在Windows程序设计里面同样可以实现定时的功能, 通过启用定时器的对象就可以实现定时作用。 用一个简单的Exp来查看定时器的使用: /* 本实例代码展示定时器的使用 ——Beeper程序 */ #include <windows.h> #define ID_T...
Windows程序设计__孙鑫C++Lesson18《ActiveX 控件》
Windows程序设计__孙鑫C++Lesson18《ActiveX 控件》 vc6.0 Win7下环境问题解决: 注意本节课程中的环境很重要,vc 6.0 在Win7系统下易发生错误,错误及解决方法如下,解决方法是: (1)无法注册控件 尝试以管理员身份进行注册 比如以管理员身份运行cmd.exe 然后键入RegSvr *.ocx 或 者以管理员身份运行一些控件注册的辅助工具,本例中我
第四章 时钟 windows程序设计 王艳平版
/////////////////////////////////////////////////////////////// // Clock.cpp文件 #include #include "resource.h" #include LRESULT __stdcall WndProc(HWND, UINT, WPARAM, LPARAM);
C++记录程序运行时间
转载自:https://www.cnblogs.com/didiaodidiao/p/9194702.html 一、Clock()计时函数 clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下: clock_t clock(void) ; 简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间
《WINDOWS 环境下32位汇编语言程序设计》第7章 图形操作(2)
图形设备接口GDI(Graphics Device Interface)是Win32的一个重要组成部分,其作用是允许Windows的应用程序将图形输出到计算机屏幕、打印机或其他输出设备上。GDI实际上是一个函数库,包括直线、画图和字体处理等数百个函数。本章介绍Win32程序调用GDI函数库进行图形操作。
C++(Windows下计算时间变化(时间差))
Windows.h文件主要是想用Sleep函数。 #include <iostream> #include <Windows.h> #include <ctime> using namespace std; int main() { int s, e; s = clock(); Sleep(1000); // sleep for 1 s...
《Windows Phone 7程序设计》样章-《数据绑定》
在我看来数据绑定是XAML类程序(WPF,Silverlight,WP7,Windows8)最最关键的概念,也是MVVM模式的基础,如果一位开发者在开发XAML类程序时并没有用上数据绑定,那么我觉得他/她还没有掌握开发XAML类程序的能力。数据绑定可以说每个XAML类程序开发者必须掌握的基本技能之一。下面是《数据绑定》样章的一部分,如果觉得翻译的不错而且条件许可,请购买正版书,谢谢您为中国文化事业...
1882



被折叠的 条评论
为什么被折叠?



