七段数字时钟演示程序

在这里插入图片描述
程序最终效果
在这里插入图片描述
源代码:

/*-------------------------------------------	
	WinMain.cpp --七段数字时钟演示程序
			GreenLeaf1976 791869691@qq.com
----------------------------------------------*/

#include <windows.h>

#define ID_TIMER	1

HINSTANCE g_hInstance = 0;

//主窗口回调函数
LRESULT CALLBACK AfxWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

//主函数WinMain
int WINAPI WinMain(_In_ HINSTANCE hInstance,
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
	g_hInstance = hInstance;
	//定义窗口类名
	TCHAR szClassName[] = TEXT("AfxWndClassName");

	//设计窗口类
	WNDCLASSEX wcEx = { 0 };
	wcEx.cbSize = sizeof(WNDCLASSEX);				//窗口类结构大小
	wcEx.cbClsExtra = 0;							//窗口类额外数据
	wcEx.cbWndExtra = 0;							//窗口额外数据	
	wcEx.style = CS_VREDRAW | CS_HREDRAW;			//窗口类样式
	wcEx.lpfnWndProc = AfxWndProc;					//窗口类过程函数
	wcEx.lpszClassName = szClassName;				//窗口类名
	wcEx.lpszMenuName = nullptr;					//菜单句柄
	wcEx.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);//窗口类背景色
	wcEx.hInstance = hInstance;						//应用程序实例
	wcEx.hCursor = LoadCursor(NULL, IDC_ARROW);		//设置默认光标
	wcEx.hIconSm = LoadIcon(NULL, IDI_APPLICATION);	//窗口类小图标
	wcEx.hIcon = wcEx.hIconSm;						//窗口类大图标

	//注册窗口类
	if (!RegisterClassEx(&wcEx))
	{
		MessageBox(nullptr, TEXT("窗口类注册失败!"), TEXT("窗口类注册消息"), MB_ICONERROR);
		return -1;
	}

	//创建窗口
	HWND hWnd = CreateWindowEx(0,	//窗口扩展样式
		szClassName,				//窗口类名称
		TEXT("我的窗口"),			//窗口标题文本
		WS_OVERLAPPEDWINDOW,		//窗口样式
		100, 100, 800, 500,			//窗口显示的矩形位置(x,y,widht,height)
		nullptr,					//父窗口句柄
		nullptr,					//窗口菜单句柄(如果是子窗口就是窗口的ID号)
		hInstance,					//应用程序实例
		0);							//附加数据

	if (!hWnd)
	{
		MessageBox(hWnd, TEXT("窗口创建失败!"), TEXT("窗口创建消息"), MB_ICONERROR);
		return -2;
	}

	//显示与更新窗口
	ShowWindow(hWnd, nShowCmd);
	UpdateWindow(hWnd);
	SetForegroundWindow(hWnd); //设置为前台显示窗口

	//消息循环
	MSG msg;
	while (GetMessage(&msg, nullptr, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}


	return msg.wParam;
}

//绘制要显示的数字的形状
void DisplayDigit(HDC hdc, int iNumber)
{
	//数字的显示字段顺序为:
	//1,是上面一横,
	//2,第二排左面一竖
	//3,第二排右面一竖
	//4,中间一横
	//5,第四排左边一竖
	//6,第四排右边一竖
	//7,最后一排的一横
	static BOOL fSevenSegment[10][7] = {
		1,1,1,0,1,1,1,	//0
		0,0,1,0,0,1,0,	//1
		1,0,1,1,1,0,1,	//2
		1,0,1,1,0,1,1,	//3
		0,1,1,1,0,1,0,	//4
		1,1,0,1,0,1,1,	//5
		1,1,0,1,1,1,1,	//6
		1,0,1,0,0,1,0,	//7
		1,1,1,1,1,1,1,	//8
		1,1,1,1,0,1,1	//9
	};

	//七段数字的各个棱形的坐标
	//可在绘图上画好图形后,用工具测量实际坐标值
	static POINT ptSegment[7][6] = {
		7,6,11,2,31,2,35,6,31,10,11,10,		//最上面一横的坐标
		6,7,10,11,10,31,6,35,2,31,2,11,		//上面左边一竖的坐标
		36,7,40,11,40,31,36,35,32,31,32,11,	//上面右边一竖的坐标
		7,36,11,32,31,32,35,36,31,40,11,40,	//中间一横的坐标
		6,37,10,41,10,61,6,65,2,61,2,41,	//下面左边一竖的坐标
		36,37,40,41,40,61,36,65,32,61,32,41,//下面右边一竖的坐标
		7,66,11,62,31,62,35,66,31,70,11,70	//最下面一横的坐标
	};

	int iSeg;
	for (iSeg = 0; iSeg < 7; iSeg++)
	{
		if (fSevenSegment[iNumber][iSeg])
			Polygon(hdc, ptSegment[iSeg], 6);
	}
}

//绘制数字
void DisplayTwoDigits(HDC hdc, int iNumber, BOOL fSuppress)
{
	if (fSuppress || (iNumber / 10 != 0))
		DisplayDigit(hdc, iNumber / 10);

	OffsetWindowOrgEx(hdc, -42, 0, nullptr);
	DisplayDigit(hdc, iNumber % 10);
	OffsetWindowOrgEx(hdc, -42, 0, nullptr);
}

//绘制冒号
void DisplayColon(HDC hdc)
{
	POINT ptColon[2][4] = {
		2,21,6,17,10,21,6,25,
		2,51,6,47,10,51,6,55
	};

	Polygon(hdc, ptColon[0], 4);
	Polygon(hdc, ptColon[1], 4);

	OffsetWindowOrgEx(hdc, -12, 0, nullptr);
}

//绘制时间
void DisplayTime(HDC hdc, BOOL f24Hour, BOOL fSuppress)
{
	SYSTEMTIME st;
	GetLocalTime(&st);

	if (f24Hour)
		DisplayTwoDigits(hdc, st.wHour, fSuppress);
	else
		DisplayTwoDigits(hdc, (st.wHour %= 12) ? st.wHour : 12, fSuppress);

	DisplayColon(hdc);
	DisplayTwoDigits(hdc, st.wMinute, TRUE);
	DisplayColon(hdc);
	DisplayTwoDigits(hdc, st.wSecond, TRUE);

}

LRESULT CALLBACK AfxWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	static BOOL f24Hour, fSupperss;
	static HBRUSH hBrushRed;
	static int cxClient, cyClient;
	HDC hdc;
	PAINTSTRUCT ps;
	TCHAR szBuffer[2];

	switch (uMsg)
	{
		case WM_CREATE:
			SetWindowText(hWnd, TEXT("七段数字时钟演示程序"));
			hBrushRed = CreateSolidBrush(RGB(255, 0, 0));
			SetTimer(hWnd, ID_TIMER, 1000, nullptr);
			//break;

		case WM_SETTINGCHANGE:
			GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ITIME, szBuffer, 2);
			f24Hour = (szBuffer[0] == '1');

			GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ITLZERO, szBuffer, 2);
			fSupperss = (szBuffer[0] == '0');

			InvalidateRect(hWnd, nullptr, TRUE);
			break;

		case WM_SIZE:
			cxClient = LOWORD(lParam);
			cyClient = HIWORD(lParam);
			break;

		case WM_TIMER:
			InvalidateRect(hWnd, nullptr, TRUE);
			break;

		case WM_PAINT:
			hdc = BeginPaint(hWnd, &ps);

			SetMapMode(hdc, MM_ISOTROPIC);
			SetWindowExtEx(hdc, 276, 72, nullptr);
			SetViewportExtEx(hdc, cxClient, cyClient, nullptr);

			SetWindowOrgEx(hdc, 138, 36, nullptr);
			SetViewportOrgEx(hdc, cxClient / 2, cyClient / 2, nullptr);

			SelectObject(hdc, GetStockObject(NULL_PEN));
			SelectObject(hdc, hBrushRed);

			DisplayTime(hdc, f24Hour, fSupperss);
			EndPaint(hWnd, &ps);
			break;

		case WM_DESTROY:
			KillTimer(hWnd, ID_TIMER);
			DeleteObject(hBrushRed);
			PostQuitMessage(0);
			return 0;

		default:
			break;
	}


	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1,initoolseup.EXE <br>读写 INI 文件的控件(258KB) <br>2,djchart.ZIP<br>djchart(57KB)<br>3,indicator.ZIP<br>数据棒图控件(200KB)<br>4,xjtpripr.ZIP <br>打印预览控件(257KB) <br>5,trend.ZIP<br>趋势控件可用于科学,工业监控,数据采集,股市分析等领域的数据显示、分析、打印(305KB) <br>6,dxcontrol.ZIP <br>API 函数控件,包含输入、声音、图形等(358KB)<br>7,gauge.ZIP <br>控件支持多数据处理和鼠标控制操作(232KB)<br>8,meter.ZIP <br>圆盘仪表控件(240KB) <br>9,percent.ZIP <br>百分比控件的应用范围非常广泛,既适用于通用的软件系统,也可用于科学、统计、工业监控等多种实时数据领域(192KB)<br>10,slider.ZIP <br>Slider 控件不但可生成通用的滑块控制,而且内置了大量的指针、刻度、数据棒风格用于组合生成各式各样的线形控制,支持鼠标的控制操作,应用领域非常广泛(246KB)<br>11,imgctls.ZIP <br>该控件包含两个控件,ImgListBox和ImgComboBox(56KB)<br>12,nslock15.ZIP<br>Sheridan Soft出品Outlook风格的工具栏控件,制作、使用都很方便,功能强大,是此类控件的佼佼者(97KB)<br>13,CDrom.ZIP <br>控制光驱的东东(5KB)<br>14,ActiveSkin.ZIP<br>界面美化(69KB)<br>15,FOXHWND.ZIP <br>一个比MCI32更出色的多媒体控件(14KB)<br>16,ACTIVEXSQL.ZIP <br>SQL接口控件(29KB)<br>17,Big2GB.ZIP <br>简繁体转换(41KB) <br>18,ACTIVEZIPPER.ZIP <br>高效率的压缩控件(11KB)<br>19,BOOKMARK.ZIP <br>BOOKMARK控件(20KB)<br>20,AresButtonPro.ZIP <br>任意形状立体动态按钮(306KB)<br>21,SysTray.ZIP <br>托盘控件(9KB) <br>22,Recorder.ZIP <br>录音控件(15KB)<br>23,CRESCENT2.ZIP <br>crescent公司的internet 编程套件2.0(2,642KB)<br>24,XCEEDZIP.ZIP <br>XCEEDZIP解压缩控件(987KB) <br>25,ZIP_ACTOCX.ZIP <br>ZIP_ACT解压缩控件(26KB)<br>26,Dssocket.ZIP <br>Dssocket是用来设计TCP/IP软件的VBX/OCX控件(781KB)<br>27,ZIPOCXCMP.ZIP <br>ZIPOCXCMP解压缩控件(83KB)<br>28,DYNACUBE.ZIP <br>DynamiCube 32-bit数据库控件(1,282KB)<br>29,DYNAZIP30.ZIP <br>DynaZIP解压缩控件(299KB)<br>30,f[1].ZIP <br>VB编程控件,使你的程序提供打印和打印预览功能(59KB)<br>31,b[1].ZIP <br>使你的应用程序能够通过internet连接在线检查更新版本(511KB)<br>32,c[1].ZIP <br>可以清晰朗读汉字,英文字母和数字的ActiveX控件(3,768KB) <br>33,cdnotiy.ZIP <br>当光盘被放进光驱或光驱里有光盘时便触发了这个控件(38KB)<br>34,Mp3play.ZIP <br>MP3PLAY 1.4 新版, 播放MP3的控件(181KB)<br>35,anigif.ZIP <br>使用动画鼠标的控件(49KB)<br>36,mp3dll.ZIP <br>又一个简单播放MP3的控件(82KB)<br>37,Zcg_3DLabel.ZIP <br>一个3D标签控件(15KB)<br>38,easyftp.ZIP <br>一个FTP客户端控件,可以用来编写自己的FTP下载软件(43KB)<br>39,mp3play.EXE <br>一个可以播放MP3编码文件的控件,DEMO版(264KB)<br>40,mp3enc.EXE <br>一个可以将WAV压缩为MP3编码文件的控件,DEMO版(269KB)<br>41,apipro.EXE <br>提供了35个与Windows API类似的功能,例如获得系统信息注册表操作等,对于VB新手是一个不错的工具,但对于熟悉API操作的老将没有多大实用价值,而且控件尺寸偏大(344KB)<br>42,sscrack.ZIP <br>一个功能十分强大数据库处理控件。可以取代VB/VC的Grid,并增强了许多数据库处理能力。可直接在pread的Grid中加入Control(346KB)<br>43,zipocx.ZIP <br>一个功能十分强大的ZIP文件压缩、解压缩控件,可以制作自解压文件。压缩包中包含一个类似WinZip的VB5演示程序(153KB)<br>44,actbar.ZIP <br>一个很Cool的菜单和工具栏增强控件,可以建立象Word97那样的工具栏和图象菜单,文件包含范例程序(353KB)<br>45,printdb.ZIP <br>一个国人自己编写的报表打印控件(158KB)<br>46,oglocx.ZIP <br>一个尺寸很小的支持OpenGL的控件,对于OpenGL中的每一个函数,这个控件都提供了相应的方法。这是一个共享控件,如果要获得它的单用户协议的版本就要$199(51KB)<br>47,actskin.ZIP <br>利用这个控件可以建立超Cool的窗口,利用该控件可以为窗口添加不同的Skin,另外压缩包中还附带了Skin编辑器(539KB)<br>48,activcap.ZIP <br>此控件是抓屏的强大工具。利用它,你可以抓下屏幕上的任何东西(293KB)<br>49,URSample.ZIP <br>一个系统权限控制控件UserRight(113KB)<br>50,coolbutton.ZIP <br>具有IE风格的按钮控件,可设置边框式样,背景 的透明特性,字体的大小颜色(34KB)<br>51,ezavimaker.ZIP <br>一个可以将BMP文件生成AVI文件的控件,包含范例(173KB)<br>52,s027_coolbutton1.ZIP <br>由4个Line控件和1个Label显示的类似命令按钮的(3KB)<br>53,CoolButton.ZIP<br>你可以把它作成一个控件(34KB)<br>54,s026_DisableX.ZIP <br>与系统有关的控件, 控制按钮,鼠标,任务条,重启计算机,程序的优先级等(17KB)<br>55,s025_capscreen.ZIP <br>这是一个屏幕拷贝的控件,可以实现全屏的拷贝并支持另存为位图类型的文件(28KB)<br>56,s017_subcls32.ZIP <br>一个子分类控件,对子分类技术头痛的朋友不用愁了。压缩包内附帮助文件及八个示例工程(46KB)<br>57,s016_trayform.ZIP <br>该控件让你轻松地将窗体发送到系统托盘中。它会在窗体的标题栏上加一个小按钮(如图所示),按这个钮就可以让窗体驻留在系统托盘中。或者改变最小化按钮的行为,当用户按最小化按钮时,窗口就不再缩小到状态栏中,而出现在系统托盘中(33KB)<br>58,s015imgctls.ZIP <br>该控件包含两个控件,ImgListBox和ImgComboBox。它扩展了ListBox和ComboBox的功能,允许你为这两个控件中的项目添加图片。另外还有一些其它的功能等待你去发掘(57KB)<br>59,s014_vertmenu.ZIP <br>用来制作类似Outlook那样的垂直菜单,是代替ActiveBar的不错选择。整个压缩文件才277k,还包括一个示例程序和源代码(280KB)<br>60,s013_ariadtbar.ZIP <br>用这个控件做工具条不须象VB自带的要用到ImageList控件,同时还有许多很方便的功能,慢慢去发掘吧(154KB)<br>61,s012.ZIP <br>一个很好进度条控件,可以放置图片(142KB)<br>62,s011.ZIP <br>用它你可以做出与Windows一模一样的资源管理器,Cool!(40KB)<br>63,s010.ZIP <br>一个很好的子分类控件(含源码),可以简化不少子分类的操作,还包含8个示例程序(46KB)<br>64,s009.ZIP <br>可以使你的CommandButton控件象IE4的工具栏上的按钮。Cool!(29KB)<br>65,s008.ZIP <br>可以把任意形状的图片转换为窗体(包含帮助文件和示例)(36KB)<br>66,s007.ZIP <br>建立一个如同vb里属性栏一样的东东,不仅形似,神也似(137KB)<br>67,s006.ZIP <br>Check Box 和 List box的结合体(101KB)<br>68,s005.ZIP <br>一种可以弹出的按钮,具有多种形态和功能(31KB)<br>69,s004.ZIP <br>在 list 控件里进行增量查询(4KB)<br>70,s003.ZIP <br>一个进度条的控件,可以有多种形态供你选择(142KB)<br>71,s002.ZIP <br>TreeView 中节点拖动、增加、删除等功能演示(8KB)<br>72,s001.ZIP <br>装入整个 C 盘目录到 TreeView(4KB)<br>73,j006_actresiz.ZIP <br>FORM的大小改变的时候,里面的对象也会跟着放大缩小(附示例原程序)(30KB)<br>74,j005_TriSpace.ZIP <br>此控件是一个软件3D引擎,内有示例源程序(73KB)<br>75,j004_lvicodra.ZIP <br>可拖拉图标的ListView控件演示(10KB)<br>76,j003_graphtreeocx.ZIP <br>图形树控件(129KB)<br>77,j002_coolbutton.ZIP <br>注释 (椭)圆、三角、星...形按钮控件,斑竹苦苦搜寻了n天n个网站,真是功夫不负有心人。 Vrey Very Cool(106KB)<br>78,j001_digital.ZIP <br>能够以液晶字体方式显示数字的一个小控件(15KB)<br>79,g003_Weiqi101.ZIP <br>完全免费的ActiveX控件,此控件用于围棋对弈程序的开发,可方便的开发出网络围棋对弈程序。(需中文VB5.0 SP3支持)(18KB)<br>80,g002_tmrchess.ZIP <br>一个好用的象棋控件(30KB)<br>81,g001_tilepuz.ZIP <br>一个 Puzzle 游戏控件(57KB)<br>82,cracbar.EXE <br>Active Bar 2.0 的破解程序(48KB)<br>83,s018_msghook.exe<br>专门用来截取Windows消息的控件,非常好用(153KB)<br>84,o006_smile.zip<br>一个简单的小人头微笑(15KB)<br>85,o005_password.zip<br>用口令保护你的应用程序的控件。(88KB)<br>86,o004_jm.zip<br>用UUEncode及UUDecode编解码的OCX控件,可以用来加密。(12KB)<br>87,o003_lyftools.zip<br>这是一个封装了500多个Windows API的控件。(229KB)<br>88,o001_spltbars.zip<br>利用该控件可以轻松地在你的应用程序中加入一个分割条(26KB)<br>89,dlinkacx.zip<br>在程序中在两个程序中进行数据的通信是一件很重要的事情,在本控件的范例中,当你打开两个范例的时候,在一个里发生的事情也会在另一个中发生,轻松帮助你完成“客户/服务器”设计(276KB)<br>90,fsanimicon.zip<br>在任务条上加入动画图标(77KB)<br>91,trispace.zip<br>自由软件, 此控件是一个软件 3d 引擎。通过此控件,您可以轻松地为您的应用程序加上 3d 特性。您可以使用三角形或多边形来构造 3d 物体或场景。你还可以自定义视觉方向等(73KB)<br>92,calendar_ocx.zip<br>进行农历转换的ocx构件.作者:尹强(14KB)<br>93,mcheck.zip<br>文件检测控件, 保护你所开发的应用程序(65KB)<br>94,ecltray.zip<br>简单的托盘(tray)控件(77KB)<br>95,fsi.zip<br>提供系统信息的控件(24KB)<br>96,keyboardcodekey.zip<br>得到键盘代码的控件, 用于检测键盘按键(13KB)<br>97,changeresolution.zip<br>改变计算机屏幕大小的控件(15KB)<br>98,ctimesynch.zip<br>与时间服务器同步的控件(16KB)<br>99,disablex.zip<br>与系统有关的控件, 控制按钮,鼠标,任务条,重启计算机,程序的优先级等(17KB)<br>100,listkill.zip<br>列表所有进程或清除某个进程的控件(18KB)<br>101,softlist.zip<br>列出计算机中所有安装的软件(15KB)<br>102,trayicon.zip<br>一个托盘(tray)控件(27KB)<br>103,trayicon1.zip<br>另一个托盘(tray)控件(28KB)<br>104,arregistry.zip<br>访问系统注册表的控件(free), 主页地址http://sevillaonline.com/activex/arregistry.htm(25KB)<br>105,cobtext.zip <br>新概念VB之CobText Test控件(20KB)<br>106,dclock.zip <br>一个液晶显示的数字时钟控件(26KB)<br>107,unlock.zip <br>得到加密的Access数据库密码(57KB)<br>108,threed32.zip <br>一个3D控件(73KB)<br>109,sblist20.zip <br>32-bit的列表框控件(有很多实用的功能) (157KB)<br>110,led.zip <br>LED液晶数字显示器控件(16KB)<br>111,lunar.zip <br>阳历/农历转换开发包 Ver1.0 (15KB)<br>112,rsgrid.exe <br>瑞软表格控件V5.0(图表)(8700KB)<br>113,swiftprint.exe <br>SwiftPrint V2.0(图表)(751KB)<br>114,vsreport.zip <br>VideoSoft VSREPORTS V1.1(图表)(3313KB)<br>115,ardemo.exe <br>ActiveReports V1.1(图表)(2750KB)<br>116,newyear.zip <br>一个制作贺卡的控件(是台湾的没有例子)(350KB)<br>117,swiftprint.zip<br>具有强大功能的打印控件,可以生成漂亮的打印文本(727KB) <br>118,print.zip<br>打印模拟控件(13KB) <br>119,hot.zip<br>系统热键控件(15KB) <br>120,hot1.zip<br>这是一个设置热键有控件,包括组合键(43KB) <br>121,list.zip<br>一个子分类控件(57KB) <br>122,Digital.zip<br>七段数码管控件及例程序(20KB) <br>123,clock.zip<br>数字时钟控件的源代码(34KB) <br>124,coollabel.zip<br>一个带源码和演示的增强Label控件,可以显示浮雕文字(66KB) <br>125,ocxdatecontrol.zip<br>从它获得当前日期再合适不过了(27KB) <br>126,tmrchess.zip<br>一个象棋控件(30KB) <br>127,mouseocx.zip<br>控制鼠标右键是否可用。(17KB)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值