C#创建环形窗体...

看看代码先

  1 public partial class Demo3 : Form
  2     { 
  3         private System.ComponentModel.IContainer components = null; 
  4         protected override void Dispose (bool disposing)
  5         {
  6             if (disposing && (components != null))
  7             {
  8                 components.Dispose ();
  9             }
 10             base.Dispose (disposing);
 11         } 
 12         private void InitializeComponent ()
 13         {
 14             this.SuspendLayout ();
 15             this.AutoScaleDimensions = new System.Drawing.SizeF (7F, 12F);
 16             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
 17             this.BackColor = System.Drawing.Color.SkyBlue;
 18             this.BackgroundImage = global::CustomControl.Properties.Resources.test01;
 19             this.ClientSize = new System.Drawing.Size (583, 500);
 20             this.Font = new System.Drawing.Font ("宋体", 9F, ((System.Drawing.FontStyle)(((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic)
 21                             | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(134)));
 22             this.ForeColor = System.Drawing.Color.Red;
 23             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
 24             this.Name = "Demo3";
 25             this.Opacity = 0.8;
 26             this.Text = "Demo3";
 27             this.MouseUp += new System.Windows.Forms.MouseEventHandler (this.Demo3_MouseUp);
 28             this.MouseDown += new System.Windows.Forms.MouseEventHandler (this.Demo3_MouseDown);
 29             this.MouseMove += new System.Windows.Forms.MouseEventHandler (this.Demo3_MouseMove);
 30             this.ResumeLayout (false);
 31 
 32         }
 33 
 34 
 35         public Demo3 ()
 36         {
 37             InitializeComponent ();
 38             this.Height = 500;
 39             this.Width = 500;
 40             this.Region = new Region (GetRoundRectPath(0,0,this.Width/4,this.Width));
 41         }
 42 
 43         /// <summary>
 44         /// 得到一个环形路径
 45         /// </summary>
 46         /// <param name="x">外圆外切正方形的左上角位置top</param>
 47         /// <param name="y">外圆外切正方形的左上角位置left</param>
 48         /// <param name="outDiameter">外圆直径</param>
 49         /// <param name="inDiameter">内圆直径</param>
 50         /// <returns></returns>
 51         public GraphicsPath GetRoundRectPath (float x, float y, int outDiameter, int inDiameter)
 52         {
 53             if (outDiameter < inDiameter)
 54             {
 55                 outDiameter = outDiameter ^ inDiameter;
 56                 inDiameter = outDiameter ^ inDiameter;
 57                 outDiameter = outDiameter ^ inDiameter;
 58                 //A=A+B;B=A-B;A=A-B;  //交换方法1 
 59                 //A=A^B;B=A^B;A=A^B;  //交换方法2
 60             }
 61 
 62             //添加一个圆
 63             GraphicsPath path1 = new GraphicsPath ();
 64             
 65             path1.AddEllipse (x, y, outDiameter, outDiameter);
 66 
 67             GraphicsPath path2 = new GraphicsPath ();
 68             path2.AddEllipse (x + (outDiameter - inDiameter) / 2, x + (outDiameter - inDiameter) / 2, inDiameter, inDiameter);
 69 
 70             path1.AddPath (path2, true);
 71 
 72             path1.AddString ("无码高清版", new FontFamily ("Arial"), (int)FontStyle.Bold, 26, new Point (170, 100), StringFormat.GenericDefault);
 73             path1.AddString ("GGYY影视公司", new FontFamily ("Arial"), (int)FontStyle.Underline, 26, new Point (160, 400), StringFormat.GenericDefault);
 74 
 75             return path1;
 76         }
 77         //记录鼠标指针的坐标
 78         private Point mouseOffset;
 79         //记录鼠标按键是否按下
 80         private bool isMouseDown = false;
 81 
 82         private void Demo3_MouseDown (object sender, MouseEventArgs e)
 83         {
 84             int xOffset;
 85             int yOffset;
 86             if (e.Button == MouseButtons.Left)
 87             {
 88                 if (this.FormBorderStyle == System.Windows.Forms.FormBorderStyle.None)
 89                 {
 90                     xOffset = -e.X ;
 91                     yOffset = -e.Y;
 92                 }
 93                 else
 94                 {
 95                     xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
 96                     yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
 97                 }
 98                 mouseOffset = new Point (xOffset, yOffset);
 99                 isMouseDown = true;
100             }
101         }
102 
103         private void Demo3_MouseMove (object sender, MouseEventArgs e)
104         {
105             if (isMouseDown)
106             {
107                 Point mousePos = Control.MousePosition;
108                 mousePos.Offset (mouseOffset.X, mouseOffset.Y);
109                 Location = mousePos;
110             }
111         }
112 
113         private void Demo3_MouseUp (object sender, MouseEventArgs e)
114         {
115             // 修改鼠标状态isMouseDown的值, 确保只有鼠标左键按下并移动时,才移动窗体
116             if (e.Button == MouseButtons.Left)
117             {
118                 isMouseDown = false;
119             }
120         } 
121 
122     }

 

 

时间: 2024-08-01 01:11:56

C#创建环形窗体...的相关文章

VB.Net创建不规则窗体 Montaque(原作)

 VB.Net创建不规则窗体    Montaque(原作)   一般说来,应用程序的窗体都是规则的,即是矩形窗体.有时候为了某种特殊的用途,我们希望改变应用程序窗体的形状,比如做个个性十足的mp3播放器,小时钟等等,这就需要 "定制"我们的应用程序.另外,特殊形状的窗体有时候也能吸引用户的注意力,使得他们格外注意你的程序. 在VB6里面,我们一般通过以下代码来创建不规则窗体.Private Declare Function SetWindowRgn Lib "user32&

C#创建不规则窗体代码

using system; using system.Collections.Generic; using system.ComponentModel; using system.Data; using system.Drawing; using system.Text; using system.windows .Forms; using system.Runtime.InteropServices; namespace APIDemo { public partial class Form1

求解决:VS2010创建web窗体后 程序停止

问题描述 当我创建web窗体时就会停止同样,当我查看一个aspx项目时一样会崩溃这种问题只会在aspx文件中出现,创建其他类别时不会出现,求解决 解决方案 解决方案二:1.重启电脑再试2.重置vs默认设置3.修复vs4.卸载后重装解决方案三:应该是你软件环境的问题,建议重装系统.检查下电脑有没有感染360等病毒.解决方案四:只能建议重装visualstudio,甚至操作系统

WPF换肤之一:创建圆角窗体

原文:WPF换肤之一:创建圆角窗体     我们都期望自己的软件能够有一套看上去很吸引人眼球的外衣,使得别人看上去既专业又有美感.这个系列就带领着大家一步一步的讲解如何设计出一套自己的WPF的窗体皮肤,如果文中有任何错误或者不足,还请指出.     WPF是微软大战略中的一个重心所在,学习WPF可谓是一举多得:首先,学习WPF可以让你了解SilverLight的80%:其次,XAML语言可以让你快速的入手WCF和WF:更甚者,就是WPF给予DX渲染核心,抛弃了传统WINFORM以GDI+为主的渲

C#创建不规则窗体的几种方式

现在,C#创建不规则窗体不是一件难事,下面总结一下: 一.自定义窗体,一般为规则的图形,如圆.椭圆等. 做法:重写Form1_Paint事件(Form1是窗体的名字),最简单的一种情况如下: System.Drawing.Drawing2D.GraphicsPath shape = new System.Drawing.Drawing2D.GraphicsPath(); shape.AddEllipse(0,0,this.Height, this.Width); this.Region = ne

怎么创建无窗体的程序?

问题描述 并不是要在后台运行,我只是要执行一些操作,然后退出(退出时可能弹出一个对话框提示),并不需要窗体怎么才能创建无窗体的程序?另外,一般不添加太多东西,程序大小都是20KB,无窗体的程序是不是会小一些? 解决方案 解决方案二:在Program.cs中改写代码namespacenoform{staticclassProgram{///<summary>///应用程序的主入口点.///</summary>[STAThread]staticvoidMain(){Applicatio

access数据库-Access中创建分割窗体,加入到水平标签或设计视图模式下后,看不到下半的数据表视图

问题描述 Access中创建分割窗体,加入到水平标签或设计视图模式下后,看不到下半的数据表视图 如题,用access2010给数据表创建了分割窗体,但切换成设计视图后,为什么只有上半部分的窗体视图而没有下半部分的数据视图? 同样的,为方便多窗口统一管理,将此分割窗体加入到 "窗体"选项卡->"导航"->"水平标签"中后,在窗口说也是只能显示上半部分. 请问,如何才能将分割窗口上下两部分同时显示在水平标签的统一管理窗口中,多谢!

创建C#窗体 当运行时只显示标题栏(如ENVI)

问题描述 创建C#窗体当运行时只显示标题栏(如ENVI) 解决方案 解决方案二:应该是工具栏吧解决方案三:没看明白,请lz再详细描述下你的需求呢?解决方案四:LZ你想干啥,只有标题栏的船体还有啥意义啊,单纯的为了显示标题?如果是想嵌入其他窗体的话,还不如搞成自定义控件解决方案五:需求不明确

Visual Studio 中创建一个智能项目,在智能项目下创建的窗体中,怎么调用web服务中的方法!!!求解

问题描述 VisualStudio中创建一个智能项目,在智能项目下创建的窗体中,怎么调用web服务中的方法!!!求解VisualStudio中创建一个智能项目,在智能项目下创建的窗体中,怎么调用web服务中的方法!!!求解 解决方案 解决方案二:引用中添加服务引用.找到服务地址.解决方案三:引用1楼chen_ya_ping的回复: 引用中添加服务引用.找到服务地址. 顶楼上,希望遇见问题,先搜索一下,更能提高自己