当前位置:   article > 正文

window桌面版太空人_太空人时钟源码

太空人时钟源码

demo描述

这是一款基于C写的小案例,是一个可以唱歌的时钟表盘.
因为表盘上的图标和数字和清除窗口的颜色重合了,出现镂空,毕竟美工太费时间了,我也不是专业的,所以P的有些拉胯,大家可以自己找素材,将我打包的素材替换即可,注意命名要一直,后缀要统一,同时也将它封装成了桌面应用.
源码和素材都打包好了,在下面.

一. 先上图

桌面上的太空人和uninstall分别是应用程序和卸载程序,安装程序放在了下面.
在这里插入图片描述
在这里插入图片描述

二. 源码

2.1 主函数main.cpp

/*
project:华为太空人手表表盘
author:多木
2023年2月26日14:10:47
Resource:www.duomu.xyz
*/
#include<graphics.h>
#include<stdio.h>
#include<mmsystem.h>
#include "date.h"
#pragma comment(lib,"winmm.lib")

IMAGE imgs[71];
IMAGE szimg[11];
IMAGE szimg2[10];//显示秒


void drawTime() {
	//获取时间,建议将其封装起来,这里我只封装了一个获取时分秒的

	int hour, minute, second;
	getTime(&hour,&minute,&second);

	//绘制时间
	int h1 = hour / 10;
	int h2 = hour % 10;
	putimage(-105, -70,&szimg[h1]);
	putimage(-70, -70, &szimg[h2]);
	//画时间的点
	putimage(-30, -60, &szimg[10]);
	putimage(-30, -35, &szimg[10]);
	//画分
	int m1 = minute / 10;
	int m2 = minute % 10;
	putimage(-10, -70, &szimg[m1]);
	putimage(30, -70, &szimg[m2]);
	//画秒
	putimage(70, -45, &szimg2[second / 10]);
	putimage(90, -45, &szimg2[second % 10]);

}
int main() {
	//1.创建表盘窗口
	//1.1创建一个和桌面一样大小的窗口
	//1.2把整个窗口设置为顶层,透明
	initgraph(
		GetSystemMetrics(SM_CXSCREEN),//动态获取桌面宽度
		GetSystemMetrics(SM_CYSCREEN)//桌面高度
	);
	//去除窗口标题栏
	//找到指定窗口标题栏
	HWND hwnd =  GetHWnd();//获取当前窗口的窗口句柄
	SetWindowLong(
		hwnd, //设置窗口属性
		GWL_STYLE,//设置窗口风格
		GetWindowLong(hwnd, GWL_STYLE) - WS_CAPTION
	);
	//窗口顶层,同时设置位置和大小
	SetWindowPos(
		hwnd,//设置的目标窗口
		HWND_TOPMOST,//顶层窗口
		0, 0, //窗口左上角的坐标
		GetSystemMetrics(SM_CXSCREEN),//动态获取桌面宽度
		GetSystemMetrics(SM_CYSCREEN),//桌面高度
		SWP_SHOWWINDOW
	);
	//窗口透明
	//1. 要求窗口设置为"分层窗口"
	//2. 再把分层窗口设置为透明
	SetWindowLong(hwnd,
		GWL_EXSTYLE,//窗口的拓展样式
		GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED

	);
	//设置分层窗口透明度
	SetLayeredWindowAttributes(
		hwnd,
		//RGB(183, 186, 191),//指定需要变成透明的背景色(灰色)
		RGB(0, 0, 0),//指定需要变成透明的背景色(灰色)
		0,//透明度 0:全透明 255:完全透明
		LWA_COLORKEY//透明方式:把窗口所有参数2的颜色变成透明
	);
	
	// 清理窗口
	//setbkcolor(RGB(183, 186, 191 ));//设置背景填充色
	setbkcolor(RGB(0, 0, 0));//设置背景填充色
	cleardevice();//使用背景颜色清理窗口
	//设置坐标原点
	setorigin(GetSystemMetrics(SM_CXSCREEN) - 150, 150);
	
	//绘制表盘
	IMAGE bg;
	loadimage(&bg,
		"ring.png",
		300, 300,//表盘尺寸
		true//等比缩放
	);
	//看54行代码知道坐标中心位置
	putimage(-150, -150, &bg);//显示表盘

	//画一个rgb(183,186,191)圈,去除毛刺
	setlinecolor(RGB(0, 0, 0));//画笔颜色
	setlinestyle(PS_SOLID, 8);//画笔颜色 实线,数字越大,线条越粗
	circle(0, 0, 152);//尽量不要超过(300/2 + 8/2)
	
	//音乐播放
	mciSendString("play bg.mp3 repeat", 0, 0, 0);
	//画太空人
	//预加载太空人图片帧
	char imgName[64];
	for (int i = 0; i < 71; i++) {
		// 文件名 图层 70
		sprintf_s(imgName, sizeof(imgName), "图层 %d.png", 71 - i);
		loadimage(&imgs[i], imgName, 75, 75, true);
	} 
	//预加载数字图片
	for (int i = 0; i < 10; i++)
	{
		sprintf_s(imgName, sizeof(imgName), "%d.png", i);
		loadimage(&szimg[i], imgName, 30, 60, true);
		loadimage(&szimg2[i], imgName, 15, 30, true);
	}
	loadimage(&szimg[10], "rect.jpg", 10, 10,true);
	//死循环,使图片一直渲染
	int k = 0;
	while (1)
	{
		putimage(-40, -15, &imgs[k]);
		k = (k + 1) % 71; //取余数,使图片从0...70 ... 0 .... 70 
		Sleep(30);

		drawTime();
	}

	system("pause");
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137

2.2 时间函数date.cpp

#include "date.h"
#include<time.h>
#include<stdio.h>
	 
//获取日期

void getDate(int* year, int* mouth, int* day, char* longliStr)
{
}
//获取周
void getWeek(int y, int m, int d, char* str)
{
}
//获取时间
void getTime(int* hour, int* minute, int* second)
{
	time_t t = time(NULL);
	struct tm* local = localtime(&t);
	*hour = local->tm_hour;
	*minute = local->tm_min;
	*second = local->tm_sec;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2.3 头文件date.h

#pragma once
void getDate(int* year, int* mouth, int* day, char* longliStr);
void getWeek(int y, int m, int d, char* str);
void getTime(int* hour, int* minute, int* second);
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

三. 源码和素材地址

下载地址
PS:代码有点拉胯,美工也拉了,但是能跑,大家如果有好的素材,可以将里面的素材替换即可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/708677
推荐阅读
相关标签
  

闽ICP备14008679号