C#Winform窗口特效源码(1)
本文基于.Net开发,使用C#作为开发语言,分别包含以下效果: 移动无边框窗口、窗口移动限制(限制在屏幕内)、桌面贴边自动隐藏(仿QQ隐藏窗口)
1、移动无边框窗口 采用了消息的方式,可以实现通过窗口内的任何控件来移动窗口
- private const int WM_NCLBUTTONDOWN = 0x00A1;
- private const int HT_CAPTION = 0x002;
- private void Form_MouseDown(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Left)
- {
- ((Control)sender).Capture = false;
- Message msg = Message.Create(Handle, WM_NCLBUTTONDOWN, (IntPtr)HT_CAPTION, IntPtr.Zero);
- base.WndProc(ref msg);
- }
- }
使用方法: 将以上代码复制到Form的class内,将Form或Form中需要控制Form移动的控件的MouseDown事件关联到这个方法上,如: 对于Form:this.MouseDown+=new System.Windows.Forms.MouseEventHandler(Form_MouseDown); 对于其它控件:Control.MouseDown+=new System.Windows.Forms.MouseEventHandler(Form_MouseDown);
2、窗口移动限制
- private const int WM_MOVING = 0x0216;
- protected override void WndProc(ref Message m)
- {
- switch (m.Msg)
- {
- case WM_MOVING: // 窗体移动的消息,控制窗体不会移出屏幕外
- int left = Marshal.ReadInt32(m.LParam, 0);
- int top = Marshal.ReadInt32(m.LParam, 4);
- int right = Marshal.ReadInt32(m.LParam, 8);
- int bottom = Marshal.ReadInt32(m.LParam, 12);
- left = Math.Min(Math.Max(0, left), Screen.PrimaryScreen.Bounds.Width - Width);
- top = Math.Min(Math.Max(0, top), Screen.PrimaryScreen.Bounds.Height - Height);
- right = Math.Min(Math.Max(Width, right), Screen.PrimaryScreen.Bounds.Width);
- bottom = Math.Min(Math.Max(Height, bottom), Screen.PrimaryScreen.Bounds.Height);
- Marshal.WriteInt32(m.LParam, 0, left);
- Marshal.WriteInt32(m.LParam, 4, top);
- Marshal.WriteInt32(m.LParam, 8, right);
- Marshal.WriteInt32(m.LParam, 12, bottom);
- break;
- }
- base.WndProc(ref m);
- }
使用方法: 添加using System.Runtime.InteropServices; 在Form类定义中加入以上代码即可 3、桌面贴边自动隐藏
- public class FormAutoDock
- {
- public static void SideHideOrShow(Form DockableForm, ref int DockFormHeight, Timer _dockTimer)
- {
- if (DockableForm.WindowState != FormWindowState.Minimized)
- {
- _dockTimer.Interval = 1500;
- if (Cursor.Position.X > DockableForm.Left - 1 && Cursor.Position.X < DockableForm.Right && Cursor.Position.Y > DockableForm.Top - 1 && Cursor.Position.Y < DockableForm.Bottom)
- {
- if (DockableForm.Top <= 0 && DockableForm.Left > 5 && DockableForm.Left < Screen.PrimaryScreen.WorkingArea.Width - DockableForm.Width)
- {
- DockableForm.Top = 0;
- }
- else if (DockableForm.Left <= 0)
- {
- DockableForm.Left = 0;
- }
- else if (DockableForm.Left + DockableForm.Width >= Screen.PrimaryScreen.WorkingArea.Width)
- {
- DockableForm.Left = Screen.PrimaryScreen.WorkingArea.Width - DockableForm.Width;
- }
- else
- {
- if (DockFormHeight > 0)
- {
- DockableForm.Height = DockFormHeight;
- DockFormHeight = 0;
- }
- }
- }
- else
- {
- if (DockFormHeight < 1)
- {
- DockFormHeight = DockableForm.Height;
- }
- if (DockableForm.Top <= 4 && DockableForm.Left > 5 && DockableForm.Left < Screen.PrimaryScreen.WorkingArea.Width - DockableForm.Width)
- {
- DockableForm.Top = 3 - DockableForm.Height;
- if (DockableForm.Left <= 4)
- {
- DockableForm.Left = -5;
- }
- else if (DockableForm.Left + DockableForm.Width >= Screen.PrimaryScreen.WorkingArea.Width - 4)
- {
- DockableForm.Left = Screen.PrimaryScreen.WorkingArea.Width - DockableForm.Width + 5;
- }
- }
- else if (DockableForm.Left <= 4)
- {
- DockableForm.Left = 3 - DockableForm.Width;
- }
- else if (DockableForm.Left + DockableForm.Width >= Screen.PrimaryScreen.WorkingArea.Width - 4)
- {
- DockableForm.Left = Screen.PrimaryScreen.WorkingArea.Width - 3;
- }
- _dockTimer.Interval = 200;
- }
- }
- }
- }
使用方法: 将FormAutoDock.cs文件复制到与需要处理的Form相同目录下,并添加到项目中 在Form的类中增加以下内容: private Timer _dockTimer = null; private int DockFormHeight = 0; private void DockTimerAutoHide_Tick(object sender, EventArgs e) { FormAutoDock.SideHideOrShow(this, ref DockFormHeight, _dockTimer); Application.DoEvents(); }
在Form类构造方法中添加以下内容: _dockTimer = new Timer(); _dockTimer.Enabled = false; _dockTimer.Interval = 200; _dockTimer.Tick += new EventHandler(DockTimerAutoHide_Tick); _dockTimer.Start();
C#Winform窗口特效源码(1)的更多相关文章
- 多种的android进度条的特效源码
多种的android进度条的特效源码,这个源码是在源码天堂那个网站上转载过来的,我已经修改一部分了,感觉很实用的,大家可以学习一下吧,我就不上传源码了,大家可以直接到那个网站上下载吧. 源码天堂下载地 ...
- JavaScript特效源码(1、文字特效)
注:本文以及以下关于Javascript特效源码都是分享自JavaScript源码大全. 1.逐隐逐现的的特效 逐隐逐现的文字特效[推荐使用][适用于IE4++] (修改显示的文字后根据说明进行共2步 ...
- C#项目 学生选课系统 C#窗口 Winform项目 项目源码及使用说明
这是一个学生选课信息管理系统,使用VS2010+SQL2008编写,VS2017正常使用. 项目源码下载地址 https://gitee.com/whuanle/xkgl 笔者录了两个视频,打开项目源 ...
- 3D轮播切换特效 源码
这个3D轮播切换特效是我2017年2月份写的 当初我 刚接触HTML不久,现在把源码分享给大家 源码的注释超级清楚 . <!-- 声明文档类型:html 作用:符合w3c统一标准规范 每个浏览器 ...
- Android 类似360悬浮窗口实现源码
当我们在手机上安装360安全卫士时,手机屏幕上时刻都会出现一个小浮动窗口,点击该浮动窗口可跳转到安全卫士的操作界面,而且该浮动窗口不受其他activity的覆盖影响仍然可见(多米音乐也有相关的和主界面 ...
- android Activity实现底部滑动弹出窗口及源码下载地址
在做微信.微博.qq等分享时,一般是点击分享按钮后会从底部弹出滑动窗口,然后选择要分享的社交平台进行分享.今日头条.腾讯新闻等内容App的评论也是从底部滑动弹出输入窗口,进行评论输入的.本篇文章就讲讲 ...
- JavaScript特效源码(4、鼠标特效)
1.鼠标感应--渐现特效 鼠标感应渐显图片[平时很模糊的图片鼠标一放上就显示清楚] [修改图片名称即可][共2步] ====1.将以下代码加入HTML的<head></head> ...
- Jquery仿IGoogle实现可拖动窗口(源码)
google可谓是ajax的特效用的淋漓尽致,google suggest, google map,igoogle 可拖动窗口等等...今天仿照iGoogle做了一个简单的小demo. 这个的demo ...
- JavaScript特效源码(7、页面特效二)
7.将站点加入频道栏 将站点加入频道栏[看详细说明] ====1.加入channel的方法:使用如下连接指向你的频道文件*.cdf. <a href="javascript:windo ...
随机推荐
- ping(1)
/* ping program for learning IP protocol author: jeff date: 2014/10/25 */ #include <stdio.h> # ...
- sql replace into 与 insert into
sql replace into用法详细说明 REPLACE的运行与INSERT很相似.只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则 ...
- Javascript实现摩斯码加密解密
原文地址 作者:liaoyu 摩尔斯电码是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母.数字和标点符号,是由美国人萨缪尔·摩尔斯在1836年发明. 每一个字符(字母或数字)对应不同的 ...
- centos6.5安装vbox
cd /etc/yum.repos.d wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo 下载跟CENTO ...
- 修改UISearchBar的Cancel按钮为中文等本地化问题
正确方法: 1:创建本地化strings. InfoPlist.strings 2:对InfoPlist.strings添加本地化语言. 即可. 只要添加文件, 系统会根据语言来调整显示文字 常见的搜 ...
- 【转】VC MFC 如何删除文件,目录,文件夹
原文网址:http://shijuanfeng.blogbus.com/logs/100675115.html 第一种方法:定义一个文件类对象来操作CFile TempFile; Temp ...
- myeclipse安装svn插件的多种方式
开发者服务评测征文 十万现金悬赏大神 方法一:在线安装 1.打开HELP->MyEclipse Configuration Center.切换到SoftWare标签页. 2.点击Ad ...
- SharePoint 2010 PowerShell 系列 之 备份、还原、部署 .WSP
转:http://www.cnblogs.com/Fengger/archive/2012/08/24/2654093.html PowerShell系列目录 最近在部署测试环境,就顺便把PowerS ...
- Art-Directing SVG图像viewBox属性
Art-Directing SVG图像viewBox属性 作者:彦子 日期:2015-06-02 点击:992 svg 译者注:根据Google Dev文档的解释,Art Direction在这篇文章 ...
- spring--处理器拦截器详解——跟着开涛学SpringMVC
5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器) 类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. ...