1、1画笔闹钟,说明书篇一:小闹钟程序课题设计报告小闹钟 VC 程序设计报告一 课题内容和要求【问题描述】编一个小闹钟程序,运行后可以在指定的时间到时,在屏幕上显示提醒时间到的语句,并使得电脑发出了悠扬的乐声。二 需求分析1 显示时间功能,即时显示当前时间2 闹钟功能,能够根据用户设置的时间来提醒用户,可以通过声音或者文字提醒 3 时间设置功能,提供菜单设置时钟的当前时间和提醒的闹钟时间4 界面设计,可模拟真实钟表界面,也可用数字界面显示,要求美观,实用和个性化三 详细设计该程序拥有四个源文件,分别为 AlarmClock.cpp AlarmClockDlg.cpp RingDlg.cpp std
2、afx.cpp2如下图所示:其作用分别为AlarmClock.cpp : 定义应用程序的类行为AlarmClockDlg.cpp : 实现文件RingDlg.cpp : 实现文件另外stdafx.cpp : 只包括标准包含文件的源文件AlarmClock.pch 将作为预编译头stdafx.obj 将包含预编译类型信息在闹钟设置面板上添加当前时间,通过文本框和标签设置需要设置的闹钟的时,分,秒。设置列表框提供闹钟的音乐供以选择。设置开关按钮决定闹钟的开始和结束另外于 MFC 播放背景音乐的问题解决如下:1.建立一个 MFC 的程序 2.插入资源(插入 -资源- 定制-(输入 WAVA) ) 3
3、.在 resources 中找到WAVA文件,打开有个 IDR_WAVA1 4.右键-import-浏览后缀名为.wav 的音频文件5.在 CMainFrame 中的 OnCreate 函数中加入语句 PlaySound(MAKEINTRESOURCE(IDR_WAVE2),AfxGetResourceHandle(), SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP);36.在该文件的上方,添加头文件#include mmsystem.h程序源代码#include stdafx.h#include AlarmClock.h#include Alar
4、mClockDlg.h#include afxdialogex.h#include RingDlg.h#include MMSystem.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ CAlarmClockDlg 对话框CAlarmClockDlg:CAlarmClockDlg(CWnd* pParent /*=NULL*/): CDialogEx(CAlarmClockDlg:IDD, pParent) , m_hour(0) , m_minute(0) , m_second(0) 7.(工程-设置- 连接-库模板添加winmm.lib) 8.编译运行
5、即可 , m_prompt(_T(时间到,闹钟响!) /载入图标 m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME); /默认响铃时长 60 秒 iLast 4= 60; /试听状态标识为 FALSE isListening = FALSE; /响铃状态标识为 FALSE /isRinging = FALSE; /用不到void CAlarmClockDlg:DoDataExchange(CDataExchange* pDX) CDialogEx:DoDataExchange(pDX); DDX_Control(pDX, IDC_STATIC_NOW,
6、m_static_now); DDX_Control(pDX, IDC_STATIC_LEFT, m_static_left); DDX_Text(pDX, IDC_EDIT_H, m_hour); DDV_MinMaxUInt(pDX, m_hour, 0, 23); DDX_Text(pDX, IDC_EDIT_M, m_minute); DDV_MinMaxUInt(pDX, m_minute, 0, 59); DDX_Text(pDX, IDC_EDIT_S, m_second); DDV_MinMaxUInt(pDX, m_second, 0, 59); DDX_Control(pD
7、X, IDC_SPIN_H, m_spin_h); DDX_Control(pDX, IDC_SPIN_M, m_spin_m); DDX_Control(pDX, IDC_SPIN_S, m_spin_s); DDX_Text(pDX, IDC_EDIT_PROMPT, m_prompt); DDV_MaxChars(pDX, m_prompt, 18); DDX_Control(pDX, IDC_COMBO_RING, m_combo_ring);BEGIN_MESSAGE_MAP(CAlarmClockDlg, CDialogEx)ON_WM_PAINT() ON_WM_QUERYDRA
8、GICON() ON_WM_CTLCOLOR() ON_WM_TIMER() 5ON_NOTIFY(NM_CLICK, IDC_SYSLINK1, CAlarmClockDlg:OnNMClickSyslink1) ON_BN_CLICKED(IDC_BUTTON_RESET, CAlarmClockDlg:OnBnClickedButtonReset)ON_EN_CHANGE(IDC_EDIT_H, CAlarmClockDlg:SetAlarmTime) ON_EN_CHANGE(IDC_EDIT_M, CAlarmClockDlg:SetAlarmTime) ON_EN_CHANGE(I
9、DC_EDIT_S, CAlarmClockDlg:SetAlarmTime) ON_BN_CLICKED(IDC_BUTTON_LISTEN, CAlarmClockDlg:OnBnClickedButtonListen)ON_CBN_SELCHANGE(IDC_COMBO_RING, CAlarmClockDlg:OnCbnSelchangeComboRing)/ ON_MESSAGE(WM_NC, CAlarmClockDlg:OnNotifyIcon) ON_WM_SYSCOMMAND() ON_WM_CLOSE() ON_WM_DESTROY()END_MESSAGE_MAP()/
10、CAlarmClockDlg 消息处理程序BOOL CAlarmClockDlg:OnInitDialog() / 设置此对话框的图标。当应用程序主窗口不是对话6框时,框架将自动 CDialogEx:OnInitDialog();篇二:全球十大创意闹钟全球十大创意闹钟 编辑本段第 10 名会爬的闹钟: 闹钟响起自己往上爬,到了天花板上你可得找梯子才能把它拿下!No.10 编辑本段第 9 名拼图闹钟:完成拼图才能让它停止,不但把你吵醒,还帮助你迅速清醒。No.9 编辑本段第 8 名诅咒闹钟,不停的诅咒你,看你起不起床!No.8 编辑本段第 7 名高音闹钟:注意不是男高音,也不是女高音,而是 95
11、分贝的高音。No.7 编辑本段第 6 名大海捞针闹钟:从这个球里找到那个能让它安静下来的按钮吧。No.6编辑本段第 5 名个大轮子一到时间就会发动,英文名字 hide and seek,意思是不抓住它就也会无影无踪的。7No.1创意设计Color Picker 颜色吸取画笔发布于 2009-04-28 21:31 751 次浏览 / 5 条评论 / 分类:创意小产品, 概念设计用过 PS 的人都知道,工具面板上一个很神奇的工具,只要把它对准目标颜色就可以吸取到想要的颜色,不错这个工具就是吸管,这样我们选择颜色就非常方便。可是谁能想到把它运用到现实画笔中来呢?目前韩国设计师 Park Jinsu
12、n 就设计了这样的概念画笔,并且获得了2008 红点设计大奖。这款神奇的画笔末端有一个扫描装置,只要把它对准目标物体并按下按钮就能通过 RGB 传感器和墨盒中墨水的混合创造出目标颜色。Designer : Park JinsunNull该文来源于 创意酷 ,原文链接:/retype/zoom/a44b9ec5aa00b52acfc7ca82?pn=5UTF-8 metaname=viewportcontent=initial-scale=1.0, title 时钟 /title maximum-scale=1.0, user-scalable=no/ /head !- 在页面或图像加载完成后发
13、生 - bodyonload=init() canvaswidth=600height=600id=canvas/canvas /body scripttype=text/javascript varnow; /当前时间 varctx;/动画标签 varhour;/当前时间的小时值; varminute;/当前时间的分钟值 varsecond;/当前时间的秒值 functioninit() / 画出时钟 clock(); / 让时钟动起来setInterval(funcName,delay) /funcName:调用的函数名 delay:调用函数的间隔,以毫秒计算。 / 画出时钟 functi
14、onclock() /获取到当前的时间 /Date 对象自动使用当前的日期和时间作为其初始值。 now= new Date(); /获得动画标签 getContext()规定画面上的绘制环境,目前只有 2d 9setInterval(clock,1000); 1000 毫秒=1 秒始 / /获取时钟的小时、分钟、秒的值 /now.获取现在时间(小时、分钟、秒)整数 hour= now.getHours(); minute= now.getMinutes(); second= now.getSeconds(); /开始画 save()保存当前图像的状态 ctx.save(); /保存之前状态,同
15、时将保存后的状态画笔位置重置 initJob();/1、初始化操作 drawBorder();/2、画时钟外框 hourScale();/3、小时刻度 minuteScale();/4、分钟刻度 hourNeedle();/5、时针 minuteNeedle();/6、分针 secondNeedle();/7、秒针 ctx.restore();/结束 restore()画完,将画笔状态还原 document.getElementById(canvas).getContext(2d); /初始化操作 functioninitJob()/clearRect() 方法删除一个画布的矩形区域。 ctx
16、.clearRect(0,0,600,600);/这里主要为了删除指针区域 ctx.translate(300,300); /指针偏移位置,默认从 0,0 处开ctx.scale(0.7,0.7); /缩放比例 ctx.lineCap= round;/刻度样式 round 圆 butt 平直 square 正方形 /canvas 中 rotate()中的角度是用弧度指定的 / 画时钟外框 /指针初始位置指在 12 点 PI:180 度 ctx.rotate(-Math.PI/ 2);ctx.save(); /beginPath() 丢弃任何当前定义的路径并且开10始一条新的路径 ctx.beg
17、inPath(); /开始新路径 ctx.lineWidth= 15; /画笔宽度,即时钟外框的宽度 / 画圆 0,0 中心点坐标(画笔偏移过后的位置就是中心点) 200 半径Math.PI*2 结束角度 true 逆时针(false 顺时针)ctx.arc(0,0,200,0, Math.PI*2,true); /画笔颜色 ctx.strokeStyle= lightcoral; /开始画 ctx.stroke(); / 动笔画 ctx.restore();/画笔路径重置 / 小时刻度 functionhourScale() / 分钟刻度 ctx.save(); ctx.lineWidth=
18、 7; / 一天 12 小时,画十二个刻度 for(vari= 0; i12; i+) ctx.restore(); /重置画笔路径 ctx.beginPath ();/开始新路径 / 360 度 / 12 度 = 30 度,Math.PI:180 弧度 ctx.rotate(Math.PI/ 6); / 刻度长度 180-160 = 20 / moveto是移动到某个坐标,lineto 是从当前坐标连线到某ctx.moveTo(180,0); / 画笔结束画的位置 ctx.lineTo(160,0); / 画笔开始的位置 ctx.stroke(); / 动笔画 个坐标度ctx.save();
19、 ctx.lineWidth= 4; / 一小时 60 分钟 for(vari= 0; i60; i+) / 画分钟刻度,需要隔开小时刻度(5 分钟一个小时刻度,跳小时刻度 / 时针 functionhourNeedle() ctx.save(); ctx.lineWidth= 8; ctx.beginPath(); / hour * (Math.PI / 6):一小时时针转动的角度 360/12 / minute * (Math.PI / 6 / 60):1 分钟时钟转动的角度 / second * 11(Math.PI /6 /60 /3600) : 1 秒钟时针转动的角 ctx.rota
20、te(hour * (Math.PI/ 6) + minute * (Math.PI /6 / ctx.restore(); if(i% 5 != 0) / 60 个分钟刻度,3600/60=60 ctx.rotate(Math.PI/ 30); ctx.beginPath(); / moveto 是移动到某个坐标, lineto 是从当前坐标连线到 ctx.moveTo(180,0); ctx.lineTo(170,0); ctx.stroke();ctx.strokeStyle= cyan; 画分钟刻度 某个坐标 360/12/6060) ); / 时针长度 100 ctx.moveTo(
21、-15,0); ctx.lineTo(85,0); ctx.stroke(); /动笔画 ctx.restore(); /重置画笔路径 / 分针 functionminuteNeedle() functionsecondNeedle() ctx.save(); ctx.lineWidth= 3; ctx.beginPath(); / 1 分钟 60 秒(秒针一圈) ,1 小时转 60 圈,一圈 360 度,1 圈 6 度 / 180 / 30 =6 ctx.rotate(second * (Math.PI/ 30); ctx.moveTo(-25,0); ctx.lineTo(135,0); ctx.stroke(); ctx.restore(); ctx.save(); ctx.lineWidth= 6; ctx.beginPath(); ctx.rotate(minute * (Math.PI/ 30) ); ctx.moveTo(-15,0); ctx.lineTo(110,0); ctx.stroke(); ctx.restore(); /script /html12