借鉴网上的winform模仿QQ窗口停靠功能稍作改动

  2015-07-11 15:24:04  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Text;
  7 using System.Windows.Forms;
  8
  9 namespace 窗口停靠
 10 {
 11     public partial class Form1 : Form
 12     {
 13         string location = null;
 14         int y;
 15         int x;
 16         public Form1()
 17         {
 18             InitializeComponent();
 19         }
 20
 21
 22
 23
 24         /// <summary>
 25
 26         /// 当窗体的位置改变时发生
 27
 28         /// </summary>
 29
 30         /// <param name="sender"></param>
 31
 32         /// <param name="e"></param>
 33
 34         private void Form1_LocationChanged(object sender, EventArgs e)
 35         {
 36             y = this.Location.Y;
 37             x = this.Location.X;
 38             if (this.Top <= 0)
 39             {
 40
 41                 location = "top";
 42
 43             }
 44
 45             else if (this.Left <= 0)
 46             {
 47
 48                 location = "left";
 49
 50             }
 51
 52
 53             else if (this.Right >= Screen.PrimaryScreen.Bounds.Width)
 54             {
 55
 56                 location = "right";
 57
 58             }
 59             else
 60             {
 61                 location = "center";
 62             }
 63
 64         }
 65         private void timer2_Tick(object sender, EventArgs e)
 66         {
 67
 68             //如果鼠标在窗体上,则根据停靠位置显示整个窗体
 69
 70             if (this.Bounds.Contains(Cursor.Position))
 71             {
 72
 73                 switch (location)
 74                 {
 75
 76                     case "top":
 77                         if(this.Location.Y<0)
 78                         {
 79                             y += 25;
 80                             if(y>0)
 81                             {
 82                                 y = 0;
 83                             }
 84                             this.Location = new Point(this.Location.X, y);
 85                         }
 86                         break;
 87
 88                     case "left":
 89
 90                          if(this.Location.X<0)
 91                         {
 92                             x += 25;
 93                             if(x>0)
 94                             {
 95                                 x = 0;
 96                             }
 97                             this.Location = new Point(x, this.Location.Y);
 98                         }
 99                         break;
100
101                     case "right":
102                         if (this.Location.X > Screen.PrimaryScreen.Bounds.Width - this.Width)
103                         {
104                             x -= 25;
105                             if (x < Screen.PrimaryScreen.Bounds.Width - this.Width)
106                             {
107                                 x = Screen.PrimaryScreen.Bounds.Width - this.Width;
108                             }
109                             this.Location = new Point(x, this.Location.Y);
110                         }
111                         break;
112
113
114                 }
115
116             }
117
118             else  //如果鼠标离开窗体,则根据停靠位置隐藏窗体,但须留出部分窗体边缘以便鼠标选中窗体
119             {
120
121                 switch (location)
122                 {
123
124                     case "top":
125
126                         y = y - 25;
127                         if(y>-this.Height+8)
128                         {
129                         this.Location = new Point(this.Location.X, y);
130
131                         }
132                         else
133                         {
134                             this.Location = new Point(this.Location.X, -this.Height + 8);
135                         }
136                         break;
137
138
139                     case "left":
140                         x -= 25;
141                         if(x>-this.Width+8)
142                         {
143                         this.Location = new Point(x, this.Location.Y);
144
145                         }
146                         else
147                         {
148                             this.Location = new Point(-this.Width + 8, this.Location.Y);
149                         }
150                         break;
151
152                     case "right":
153
154
155                         if(x<Screen.PrimaryScreen.Bounds.Width-8 )
156                         {
157                             x += 25;
158                         this.Location = new Point(x, this.Location.Y);
159
160                         }
161                         else
162                         {
163                             this.Location = new Point(Screen.PrimaryScreen.Bounds.Width + - 8, this.Location.Y);
164                         }
165                         break;
166                 }
167
168             }
169
170         }
171     }
172
173 }
174     
时间: 2024-11-13 07:10:16

借鉴网上的winform模仿QQ窗口停靠功能稍作改动的相关文章

Winform调用QQ发信息并且开机启动 (开源)

前言 公司CS系统需要加入启动qq从winform调用qq聊天窗口的功能,前提是需要将聊天者的QQ号码作为参数传递到函数中,一直没有搞过,正好很感兴趣,就折腾,Winform调用qq,我想肯定是需要一些编码思路,下面列出编码前思路图 检查QQ安装后在注册表中的具体路径 根据注册表找到调用QQ程序的exe完整路径(Timwp.exe) 启动,达到winform调用QQ的要求 先看简单测试界面 步骤1 找到QQ的注册表路径,经过百度之后分析得到思路,正确的路径 32位QQ安装后注册表路径SOFTWA

winform实现QQ聊天气泡200行代码

c# winform实现QQ聊天气泡界面,原理非常简单,通过webKitBrowser(第三方浏览器控件,因为自带的兼容性差)加载html代码实现,聊天界面是一个纯HTML的代码,与QQ的聊天界面可以比拟,很不错,因为是html所以扩展性非常大,点击发送按钮可以将文本框的文字加入聊天里,项目开发过程遇到几个难点都解决了,如: 1.怎么在聊天新消息插入后将滚动条滚动到最底部,这里我网上搜索了webKitBrowser的滚动条用法找不到,所以这里我用了锚点链接通过每次加载html用js跳到锚点实现滚

模仿QQ气泡聊天

尝试了几种方案,想模仿QQ的气泡聊天,总是不尽如意.网上倒是大把的Android和Html的例子,Delphi的没找着,只能自己试着折腾. 1. 用WebBrowser加载本地html,屡次折腾,失败. 遇到的问题是(1)CSS3效果显示不出来(2)不熟悉JS,没整明白如何加载记录.刷新数据. 2. VCLForm中加载FMXForm, 效果倒是出来了,跟下图相差不大,但是结果还是失败. 遇到的问题是(1)使用的FireMonkey控件有几个报错没搞定(2)引用了FMX相关的单元后,编译出来的e

js封装好的模仿qq消息弹窗代码

在我们的日常开发中,或者生活中,经常需要用到弹出窗.这里我们就用js模拟一下qq消息一样的弹出窗. 直接贴代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&

UI--学习模仿QQ未读提醒拖拽删除

<代码里的世界> -UI篇 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/details/46608385 [导航] 弹出式对话框各种方案 从仿QQ消息提示框来谈弹出式对话框的实现方式 (Dialog,PopupWind,自定义View,Activity,FragmentDialog) Dialog源码解析 从源码上看Dialog与DialogFragment 仿IOS ActionShe

[转]Android:布局实例之模仿QQ登录界面

Android:布局实例之模仿QQ登录界面 预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布为 4.分析样式选择器 下拉箭头2种样式:点击和默认状态 文本框2种样式:聚焦和默认状态 复选框3种样式:选择.不选择和鼠标点着不放 左下角按钮2种样式:点击和默认 登录按钮2样式:点击和默认 ============================================帖代码===========

Android 模仿QQ空间风格的 UI

本文内容 环境 演示模仿QQ空间风格的UI 虽然这个 UI 跟现在的QQ空间有点差别,但是也能学到很多东西. 下载 Demo 环境 Windows 7 64 位 Eclipse ADT V22.6.2,Android 4.4.3 SAMSUNG GT-I9008L,Android OS 2.2.2   演示模仿QQ空间风格的UI 虽然这个 UI 跟现在的QQ空间有点差别,但是也能学到很多东西.比如, 当点击"加号"时的效果是如何实现的: 当点击"我的空间动态"时的效

模仿QQ截图片

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Text; 7 using System.Windows.Forms; 8 using System.Data.OleDb; 9 using System.Xml; 10 namespace Test 11 { 1

QQ窗口的控制,同步异步打开360网盘,控制360网盘窗口的移动

 1.通过system启动飞秋进程的方式: 2.Windows下杀死进程的方式是:taskkill /f/im QQ.exe,截图如下: 3.控制360网盘的移动,打开等效果: #include<stdio.h> #include<stdlib.h> #include<Windows.h> /************************************************************************/ /*非作业题:由于没有百度网