C#窗口皮肤制作(二):创建窗口库项目以及最小化、最大化、关闭button的实现
非常高兴有朋友关注这篇博客,同一时候也十分抱歉让关注的朋友久等了,隔上一篇博客也有3个月没有更新,主要是因为3月份辞职,4月份初离职到期离开了北京高德,来到了上海张江。眼下新工作也处于熟悉其中,希望大家能体谅。刚好这周末有点时间,我就接着写写,这篇博客主要是针对刚開始学习的人,希望给为他们能提供一种较易理解的窗口皮肤制作思路,记得自己当初学习C#编程的时候也是摸着石头过河。
闲话少说,我还是接着上篇博客继续写,上次说明了下怎样收集图片资源,这次就以360安全卫士来做演示样例进行模仿,本来也想过模仿下qq,可是qq的界面不太大众化也比較复杂,因为主要目的是希望让刚開始学习的人弄明确做皮肤制作的思路,话说"授人以鱼不如授人以渔",因此这套博客的解讲的过程会比較简单易懂,让刚開始学习的人也能学的明确,而且会将每篇相应的代码上传到我的csdn资源中,感兴趣的能够下载。我相信仅仅要明确了思路,加上自己努力,qq之类的界面也是能够搞定的。
这一篇博客主要是讲自己定义窗口的实现大体思路,以及最小化、最大化、关闭button的实现。整体思路是去掉窗口的默认边框,用其它的控件来替代最小化、最大化、关闭button的默认实现。第一讲不会考虑太多的细节,待功能开发的差点儿相同时再进行一些代码的重构。因为是第一篇关于代码的,所以会从项目的创建、图片资源的引入開始,一步步解说。
第一步:资源图片的选择
资源图片下载地址:[http://download.csdn.net/detail/bbirdsky/6923955]找到压缩包中的360safe.zip;
这一讲主要使用到的图片资源有:./MainFrame/Image/
background_mainwnd.jpg // 这张做为窗口的背景,为了命名简单更名为img_bg
sys_button_***.jpg //这4张分别相应最小化、最大化(还原)、关闭按钮的图片,更名为btn_***。
第二步:创建解决方式(MySkins)
并加入一个Window窗口控件库项MySkins目用于做自定皮肤,另外加入一个Window窗口应用程序项目MySkinsTest用于做測试,并将MySkinsTest做为默认启动项目,并为MySkinsTest加入引用项目MySkins步骤如图:
第三步:创建文件夹结构
创建Contorl、Entity、Frame、Util用于存放相应的类文件,以及将图片资源加入进项目的图片资源中去,终于的项目结构如图:
第四步:測试代码
先在MySkins项目中加入一个BaseForm窗口,并在MySkinsTest測试项目中让默认的Form1窗口继承自BaseForm,測试项目仅仅是用于測试MySkins项目的效果,注意一定要先加入MySkins依赖项目,不然会找不到BaseForm这个类!
namespace MySkinsTest
{
public partial class Form1 : BaseForm
{
public Form1()
{
InitializeComponent();
}
}
}
第五步:皮肤代码(BaseForm)
1、此篇的核心就是BaseForm窗口基类,首先在Frame文件夹下创建一个普通的Form窗口,并做例如以下属性设置:
1>将FormBorderStyle设置为None,此时Form窗口就没有边框以及最大小、最小化、关闭button了;
将BackgroundImage设置为img_bg,并将DoubleBuffered双缓冲设置为true。
2>加入三个PictureBox分别用于替代最小化、最大化、关闭button,也能够尝试使用Button替代;
将PictureBox的BackColor设置为Transparent透明,默认是灰色;
将三个PictureBox的定位设置为Anchor:Top,Right,这样最大化后的按扭位置后按右上保持不变;
绑定鼠标点击、移入移出、按下抬起事件,建议是同样事件用同一个事件方法处理。
3>加入一个ToolTip控件,用于显示提示信息,设置完的效果例如以下图:
2、代码分析:本讲主要包括ControlState控件状态和ResUtils资源帮助类。
1>因为图片的背景图片是4个为一组的,因此定义状态枚举类:ControlState,代码例如以下:
/// <summary>
/// 控件状态
/// </summary>
public enum ControlState
{
Normal = 1,//控件默认时
MouseOver = 2,//鼠标移上控件时
MouseDown = 3,//鼠标按下控件时
Disable = 4 //当控件不可用时
}
2>因为须要从资源中获取图片以及须要对获取的图片按状态进行切分,因些须要帮助类:ResUtils,代码例如以下:
/// <summary>
/// 资源辅助类
/// </summary>
class ResUtils
{
/// <summary>
/// 依据资源名称获取图像
/// </summary>
/// <param name="name">资源名称</param>
/// <returns>图像</returns>
public static Bitmap GetResAsImage(string name)
{
if (name == null || name == "")
{
return null;
}
return (Bitmap)Properties.Resources.ResourceManager.GetObject(name);
} /// <summary>
/// 图片button的背景图是4个,依据状态获取当中背景图
/// </summary>
/// <param name="name">图片名称</param>
/// <param name="state">状态</param>
/// <returns></returns>
public static Bitmap GetResWithState(String name, ControlState state)
{
Bitmap bitmap = (Bitmap)GetResAsImage(name);
if (bitmap == null)
{
return null;
}
int block = 0;
switch (state)
{
case ControlState.Normal: block = 0; break;
case ControlState.MouseOver: block = 1; break;
case ControlState.MouseDown: block = 2; break;
case ControlState.Disable: block = 3; break;
}
int width = bitmap.Width / 4;
Rectangle rect = new Rectangle(block * width, 0, width, bitmap.Height);
return bitmap.Clone(rect, bitmap.PixelFormat);
}
}
3>对于最小化、最大化、关闭的实现代码例如以下:
this.WindowState = FormWindowState.Maximized; // 最大化
this.WindowState = FormWindowState.Minimized; // 最小化
this.WindowState = FormWindowState.Normal; // 一般状态
this.Close(); // 关闭
3、第一讲终于的效果实现了一个比較简单自己定义窗口,具有最大化、最小化以及关闭功能。
不具备的功能:没有窗口小图标、标题,不能对窗口进行拖动、调整窗口大小,这是下一节要实现的功能。
小图标和标题比較简单好实现 ,窗口拖动、调整大小不使用win32Api也能够实现,可是效果不是太好,下节将使用win32Api进行实现!
对Win32不了解的能够看看这个文档:http://download.csdn.net/detail/bbirdsky/6910413
最后,我将继续保持更新。本篇相应代码下载:http://download.csdn.net/detail/bbirdsky/7366791。
C#窗口皮肤制作(二):创建窗口库项目以及最小化、最大化、关闭button的实现的更多相关文章
- Winform 基础二 最小化 最大化 关闭 点击任务栏隐藏显示 点击鼠标左键移动窗体
一 最大化 二 最小化 三 关闭 四 点击任务栏隐藏显示 五 点击鼠标左键移动窗体 六 阴影效果鼠标左键移动窗口 #region UI设置 最大化.最小化.关闭.鼠标移动窗口.点击任务栏切换窗口 th ...
- delphi -----(去掉窗口最大化,最小化、关闭),主窗口,和子窗口之间的设置
一.去掉窗口最大化,最小化.关闭 borderIcons:biSystemMenu:false borderStyle:bsSizeable 二.主子窗口 主main: //调用子窗体procedur ...
- JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)
转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm 这篇文章主要介绍了JS实现漂亮的窗口 ...
- iPhone手机解锁效果&&自定义滚动条&&拖拽--Clone&&窗口拖拽(改变大小/最小化/最大化/还原/关闭)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- git使用(二)----创建版本库
创建版本库(操作都是在linux环境下) 什么是版本库呢?版本库又名仓库,英文名repository,其实就是一个目录,可以进行增删查改 创建一个目录,这里在根目录下创建一个git_home目录mkd ...
- 二创建maven父子项目
关于maven中的parent聚合一直都有没好好总结,固有这篇. ------------------------------------------------------------------- ...
- Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式
我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有 ...
- NSIS隐藏窗口标题栏自带的按钮(最大化,最小化,关闭X)
这个问题实在八月份逛csdn论坛的时候偶然遇到的,当时比较好奇楼主为啥要隐藏关闭按钮,就顺口问了下,结果楼主已经弃楼,未给出原因,猜着可能是为了做自定义页面美化,无法改变按纽外观之类的,后来琢磨了下, ...
- android studio学习----如何创建一个库项目
首先,打开Android studio的软件工具,进入到界面中点击菜单的“file”选项. 2 在弹出的下拉的菜单中,可以看到的是为"New Module“的选项点击进入. 3 进入到c ...
随机推荐
- springMVC入门-08
这一讲介绍用户登录实现以及两种异常处理controller控制器的方法,最后提一下在springMVC中对静态资源访问的实现方法. 用户登录需要一个登录页面login.jsp,对应代码如下所示: &l ...
- [翻译] JKLLockScreenViewController
JKLLockScreenViewController https://github.com/tiny2n/JKLLockScreenViewController Overview It is Loc ...
- 使用截图工具FastStone Capture
使用截图工具FastStone Capture -谨以此教程献给某位上进的测试人员- FastStone Capture是本人用过的windows平台上最好用的截图工具,界面简洁,功能强大,还支持屏幕 ...
- [book] iOS 8 Swift Programming Cookbook
iOS 8 Swift Programming Cookbook 资源地址 http://pan.baidu.com/s/1c0hn1Gc 书籍介绍 源码截图 书籍截图
- python操作Exchange邮箱实例(-)
需求很简单,就是实现按公司域名及服务器模拟exchange发送邮件,主要是协助自动化测试.主要功能:收件人/抄送/正文html/附件 本实例基于:python2.7.11 exchangelib1.1 ...
- 汽车学习---汽车知识大全【all】
汽车驱动/发动机/大灯 侧方位停车和倒车入库技巧 手动挡车型 换档8大技巧 常见的掉头情况注意事项 最全的左转,右转,待转,掉头方法 开车技巧大汇总,尤其适合新手司机 汽车常识扫盲,不做“汽车小白”! ...
- Linux 系统常见命令功能大全_【all】
Linux常见快捷键(6个) ctrl + u:剪贴光标前面 ctrl + k:剪贴光标后面 ctrl + y:粘贴 ctrl + r:查找命令 ctrl + insert:复制 shift+ ins ...
- Linux at命令详解
at 只能执行一次,在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程 anacron: 适合于非 7*24 类型的服务器,以天为周期或者在系统开机后执行任务的工作 它会定时检测服务 ...
- 阿里云堡垒机密钥连接ECS服务器
文:铁乐与猫 2017-6月中旬 堡垒机远程桌面windows系统就不用细说了 堡垒机远程ssh连接linux系统倒要说一下,毕竟是为安全一般只用通过密钥连接,而不使用密码的方式连接. 首先我们得在需 ...
- Centos7 apache2.4.29(httpd) 安装
重点参考文章:https://blog.csdn.net/MrDing991124/article/details/78829184 写的很详细了,自己按着改博文走了不遍,不错! 一.配置安装环境 ...