热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

winform壁纸工具为图片添加当前月的日历信息

使用用winform做了一个设置壁纸小工具,为图片添加当月的日历并设为壁纸,可以手动定时设置壁纸,最主要的特点是在图片上生成当前月的日历信息,感兴趣的你可以参考下
这几天用winform做了一个设置壁纸的小工具, 为图片添加当月的日历并设为壁纸,可以手动设置壁纸,也可以定时设置壁纸,最主要的特点是在图片上生成当前月的日历信息。

工具和桌面设置壁纸后的效果如下:
 
在图片上画日历的类代码Calendar.cs如下:
代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
namespace SetWallpaper
{
public class Calendar
{
///
/// 计算星期几: 星期日至星期六的值为0-6
///

public static int GetWeeksOfDate(int year, int month, int day)
{
DateTime dt = new DateTime(year, month, day);
DayOfWeek d = dt.DayOfWeek;
return Convert.ToInt32(d);
}
///
/// 获取指定年月的天数
///

public static int GetDaysOfMonth(int year, int month)
{
DateTime dtCur = new DateTime(year, month, 1);
int days = dtCur.AddMonths(1).AddDays(-1).Day;
return days;
}
///
/// 获取在图片上生成日历的图片
///

public static Bitmap GetCalendarPic(Image img)
{
Bitmap bmp = new Bitmap(img.Width, img.Height, PixelFormat.Format24bppRgb);
bmp.SetResolution(72, 72);
using (Graphics g = Graphics.FromImage(bmp))
{
g.DrawImage(img, 0, 0, img.Width, img.Height);
DateTime dtNow = DateTime.Now;
int year = dtNow.Year;
int mOnth= dtNow.Month;
int day = dtNow.Day;
int day1st = Calendar.GetWeeksOfDate(year, month, 1); //第一天星期几
int days = Calendar.GetDaysOfMonth(year, month); //获取想要输出月份的天数
int startX = img.Width / 2; //开始的X轴位置
int startY = img.Height / 4; //开始的Y轴位置
int posLen = 50; //每次移动的位置长度
int x = startX + day1st * posLen; //1号的开始X轴位置
int y = startY + posLen * 2;//1号的开始Y轴位置
Calendar.DrawStr(g, dtNow.ToString("yyyy年MM月dd日"), startX, startY);
string[] weeks = { "日", "一", "二", "三", "四", "五", "六" };
for (int i = 0; i Calendar.DrawStr(g, weeks[i], startX + posLen * i, startY + posLen);
for (int j = 1; j <= days; j++)
{
if (j == day)//如果是今天,设置背景色
Calendar.DrawStrToday(g, j.ToString().PadLeft(2, ' '), x, y);
else
Calendar.DrawStr(g, j.ToString().PadLeft(2, ' '), x, y);
//星期六结束到星期日时换行,X轴回到初始位置,Y轴增加
if ((day1st + j) % 7 == 0)
{
x = startX;
y = y + posLen;
}
else
x = x + posLen;
}
return bmp;
}
}
///
/// 绘制字符串
///

public static void DrawStr(Graphics g, string s, float x, float y)
{
Font fOnt= new Font("宋体", 25, FontStyle.Bold);
PointF pointF = new PointF(x, y);
g.DrawString(s, font, new SolidBrush(Color.Yellow), pointF);
}
///
/// 绘制有背景颜色的字符串
///

public static void DrawStrToday(Graphics g, string s, float x, float y)
{
Font fOnt= new Font("宋体", 25, FontStyle.Bold);
PointF pointF = new PointF(x, y);
SizeF sizeF = g.MeasureString(s, font);
g.FillRectangle(Brushes.White, new RectangleF(pointF, sizeF));
g.DrawString(s, font, Brushes.Black, pointF);
}
}
}

主窗体设置壁纸等的代码FrmMain.cs如下:
代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing.Drawing2D;
using Microsoft.Win32;
using System.Collections;
using System.Runtime.InteropServices;
using System.Xml;
using System.Drawing.Imaging;
namespace SetWallpaper
{
public partial class FrmMain : Form
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
int screenWidth = Screen.PrimaryScreen.Bounds.Width;
int screenHeight = Screen.PrimaryScreen.Bounds.Height;
FileInfo[] picFiles;
public FrmMain()
{
InitializeComponent();
}
private void FrmMain_Load(object sender, EventArgs e)
{
List list = new List(){
new DictionaryEntry(1, "居中显示"),
new DictionaryEntry(2, "平铺显示"),
new DictionaryEntry(3, "拉伸显示")
};
cbWallpaperStyle.DisplayMember = "Value";
cbWallpaperStyle.ValueMember = "Key";
cbWallpaperStyle.DataSource = list;
txtPicDir.Text = XmlNodeInnerText("");
timer1.Tick += new EventHandler(timer_Tick);
Text = string.Format("设置桌面壁纸(当前电脑分辨率{0}×{1})", screenWidth, screenHeight);
}
///
/// 浏览单个图片
///

private void btnBrowse_Click(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.Filter = "Images (*.BMP;*.JPG)|*.BMP;*.JPG;";
openFileDialog.AddExtension = true;
openFileDialog.RestoreDirectory = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
Bitmap img = (Bitmap)Bitmap.FromFile(openFileDialog.FileName);
pictureBox1.Image = img;
string msg = (img.Width != screenWidth || img.Height != screenHeight) ? ",建议选择和桌面分辨率一致图片" : "";
lblStatus.Text = string.Format("当前图片分辨率{0}×{1}{2}", img.Width, img.Height, msg);
}
}
}
///
/// 手动设置壁纸
///

private void btnSet_Click(object sender, EventArgs e)
{
if (pictureBox1.Image == null)
{
MessageBox.Show("请先选择一张图片。");
return;
}
Image img = pictureBox1.Image;
SetWallpaper(img);
}
private void SetWallpaper(Image img)
{
Bitmap bmp = Calendar.GetCalendarPic(img);
string filename = Application.StartupPath + "/wallpaper.bmp";
bmp.Save(filename, ImageFormat.Bmp);
string tileWallpaper = "0";
string wallpaperStyle = "0";
string selVal = cbWallpaperStyle.SelectedValue.ToString();
if (selVal == "1")
tileWallpaper = "1";
else if (selVal == "2")
wallpaperStyle = "2";
//写到注册表,避免系统重启后失效
RegistryKey regKey = Registry.CurrentUser;
regKey = regKey.CreateSubKey("Control Panel\\Desktop");
//显示方式,居中:0 0, 平铺: 1 0, 拉伸: 0 2
regKey.SetValue("TileWallpaper", tileWallpaper);
regKey.SetValue("WallpaperStyle", wallpaperStyle);
regKey.SetValue("Wallpaper", filename);
regKey.Close();
SystemParametersInfo(20, 1, filename, 1);
}
///
/// 浏览文件夹
///

private void btnBrowseDir_Click(object sender, EventArgs e)
{
string defaultfilePath = XmlNodeInnerText("");
using (FolderBrowserDialog dialog = new FolderBrowserDialog())
{
if (defaultfilePath != "")
dialog.SelectedPath = defaultfilePath;
if (dialog.ShowDialog() == DialogResult.OK)
XmlNodeInnerText(dialog.SelectedPath);
txtPicDir.Text = dialog.SelectedPath;
}
}
///
/// 获取或设置配置文件中的选择目录
///

///
///
public string XmlNodeInnerText(string text)
{
string filename = Application.StartupPath + "/config.xml";
XmlDocument doc = new XmlDocument();
if (!File.Exists(filename))
{
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(dec);
XmlElement elem = doc.CreateElement("WallpaperPath");
elem.InnerText = text;
doc.AppendChild(elem);
doc.Save(filename);
}
else
{
doc.Load(filename);
XmlNode node = doc.SelectSingleNode("//WallpaperPath");
if (node != null)
{
if (string.IsNullOrEmpty(text))
return node.InnerText;
else
{
node.InnerText = text;
doc.Save(filename);
}
}
}
return text;
}
///
/// 定时自动设置壁纸
///

private void btnAutoSet_Click(object sender, EventArgs e)
{
string path = txtPicDir.Text;
if (!Directory.Exists(path))
{
MessageBox.Show("选择的文件夹不存在");
return;
}
DirectoryInfo dirInfo = new DirectoryInfo(path);
picFiles = dirInfo.GetFiles("*.jpg");
if (picFiles.Length == 0)
{
MessageBox.Show("选择的文件夹里面没有图片");
return;
}
if (btnAutoSet.Text == "开始")
{
timer1.Start();
btnAutoSet.Text = "停止";
lblStatus.Text = string.Format("定时自动换壁纸中...");
}
else
{
timer1.Stop();
btnAutoSet.Text = "开始";
lblStatus.Text = "";
}
}
///
/// 定时随机设置壁纸
///

private void timer_Tick(object sender, EventArgs e)
{
timer1.Interval = 1000 * 60 * (int)numericUpDown1.Value;
FileInfo[] files = picFiles;
if (files.Length > 0)
{
Random random = new Random();
int r = random.Next(1, files.Length);
Bitmap img = (Bitmap)Bitmap.FromFile(files[r].FullName);
pictureBox1.Image = img;
SetWallpaper(img);
}
}
///
/// 双击托盘图标显示窗体
///

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
ShowForm();
}
///
/// 隐藏窗体,并显示托盘图标
///

private void HideForm()
{
this.Visible = false;
this.WindowState = FormWindowState.Minimized;
notifyIcon1.Visible = true;
}
///
/// 显示窗体
///

private void ShowForm()
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
notifyIcon1.Visible = false;
}
private void ToolStripMenuItemShow_Click(object sender, EventArgs e)
{
ShowForm();
}
///
/// 退出
///

private void toolStripMenuItemExit_MouseDown(object sender, MouseEventArgs e)
{
Application.Exit();
}
///
/// 最小化时隐藏窗体,并显示托盘图标
///

private void FrmMain_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
HideForm();
}
}
}
}

推荐阅读
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了如何使用Spring Boot进行高效开发,涵盖了配置、实例化容器以及核心注解的使用方法。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 本文介绍如何在 Unity 的 XML 配置文件中,将参数传递给自定义生命周期管理器的构造函数。我们将详细探讨 CustomLifetimeManager 类的实现及其配置方法。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ... [详细]
author-avatar
Less哒哒_288
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有