当前位置:   article > 正文

C#创建圆形窗体的方法:创建特殊窗体

C#创建圆形窗体的方法:创建特殊窗体

目录

一、涉及到的知识点 

1.OnPaint方法

2.将窗体设置为透明

(1)Form1的BackColor = SystemColors.Control

(2) Form1的背景色是某种颜色,比如BackColor = SystemColors.White

(3)加载资源图片

二、设计实例

1.资源图片管理器

2.设计管理器

3.Form1.cs

4.运行效果


        非矩形窗体是一种特殊窗体。创建非矩形窗体时,主要通过重写窗体OnPaint方法,并在其中对窗体进行重绘,然后使用透明色将窗体设置为透明来实现的。

一、涉及到的知识点 

1.OnPaint方法

        该方法主要用来重新绘制窗体图像。语法格式如下:

  1. protected override void OnPaint(PaintEventArgs e)
  2. 参数说明
  3. PaintEventArgs:为Paint事件提供数据。

2.将窗体设置为透明

        将窗体设置为透明时用到了Bitmap类的MakeTransparent方法,该方法主要用来使指定的颜

色对Bitmap位图透明。语法格式如下:

  1. publie void MakeTransparent(Color transparentColor)
  2. 参数说明
  3. transparentColor:Color结构,它表示要使之透明的颜色。

        有两种情况,要透明的颜色的处理,用不同的办法: 

(1)Form1的BackColor = SystemColors.Control

  1. // Form1的设置
  2. BackColor = SystemColors.Control;
  3. TransparencyKey = SystemColors.Control;
  4. // 透明化控制
  5. bit = new Bitmap(Properties.Resources.bccd);
  6. bit.MakeTransparent(Color.FromKnownColor(KnownColor.Control)); //对Control色的透明化

(2) Form1的背景色是某种颜色,比如BackColor = SystemColors.White

  1. // Form1的设置
  2. BackColor = SystemColors.White;
  3. TransparencyKey = SystemColors.White;
  4. // 透明化控制
  5. bit = new Bitmap(Properties.Resources.bccd);
  6. bit.MakeTransparent(Color.White); //只对Color.White透明化

(3)加载资源图片

         详见本文作者写的其他文章:

二、设计实例

        设计一个圆形的特殊窗体,双击鼠标关闭窗体。

1.资源图片管理器

  1. //------------------------------------------------------------------------------
  2. // <auto-generated>
  3. // 此代码由工具生成。
  4. // 运行时版本:4.0.30319.42000
  5. //
  6. // 对此文件的更改可能会导致不正确的行为,并且如果
  7. // 重新生成代码,这些更改将会丢失。
  8. // </auto-generated>
  9. //------------------------------------------------------------------------------
  10. namespace _178.Properties {
  11. using System;
  12. /// <summary>
  13. /// 一个强类型的资源类,用于查找本地化的字符串等。
  14. /// </summary>
  15. // 此类是由 StronglyTypedResourceBuilder
  16. // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
  17. // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
  18. // (以 /str 作为命令选项),或重新生成 VS 项目。
  19. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
  20. [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
  21. [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
  22. internal class Resources {
  23. private static global::System.Resources.ResourceManager resourceMan;
  24. private static global::System.Globalization.CultureInfo resourceCulture;
  25. [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
  26. internal Resources() {
  27. }
  28. /// <summary>
  29. /// 返回此类使用的缓存的 ResourceManager 实例。
  30. /// </summary>
  31. [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
  32. internal static global::System.Resources.ResourceManager ResourceManager {
  33. get {
  34. if (object.ReferenceEquals(resourceMan, null)) {
  35. global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("_178.Properties.Resources", typeof(Resources).Assembly);
  36. resourceMan = temp;
  37. }
  38. return resourceMan;
  39. }
  40. }
  41. /// <summary>
  42. /// 重写当前线程的 CurrentUICulture 属性,对
  43. /// 使用此强类型资源类的所有资源查找执行重写。
  44. /// </summary>
  45. [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
  46. internal static global::System.Globalization.CultureInfo Culture {
  47. get {
  48. return resourceCulture;
  49. }
  50. set {
  51. resourceCulture = value;
  52. }
  53. }
  54. /// <summary>
  55. /// 查找 System.Drawing.Bitmap 类型的本地化资源。
  56. /// </summary>
  57. internal static System.Drawing.Bitmap bccd {
  58. get {
  59. object obj = ResourceManager.GetObject("bccd", resourceCulture);
  60. return ((System.Drawing.Bitmap)(obj));
  61. }
  62. }
  63. }
  64. }

2.设计管理器

  1. namespace _178
  2. {
  3. partial class Form1
  4. {
  5. /// <summary>
  6. /// Required designer variable.
  7. /// </summary>
  8. private System.ComponentModel.IContainer components = null;
  9. /// <summary>
  10. /// Clean up any resources being used.
  11. /// </summary>
  12. /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
  13. protected override void Dispose(bool disposing)
  14. {
  15. if (disposing && (components != null))
  16. {
  17. components.Dispose();
  18. }
  19. base.Dispose(disposing);
  20. }
  21. #region Windows Form Designer generated code
  22. /// <summary>
  23. /// Required method for Designer support - do not modify
  24. /// the contents of this method with the code editor.
  25. /// </summary>
  26. private void InitializeComponent()
  27. {
  28. SuspendLayout();
  29. //
  30. // Form1
  31. //
  32. AutoScaleDimensions = new SizeF(7F, 17F);
  33. AutoScaleMode = AutoScaleMode.Font;
  34. BackColor = Color.White;
  35. BackgroundImageLayout = ImageLayout.None;
  36. ClientSize = new Size(300, 300);
  37. DoubleBuffered = true;
  38. FormBorderStyle = FormBorderStyle.None;
  39. Name = "Form1";
  40. StartPosition = FormStartPosition.CenterScreen;
  41. Text = "创建非矩形窗体";
  42. TransparencyKey = Color.White;
  43. Load += Form1_Load;
  44. MouseDoubleClick += Form1_MouseDoubleClick;
  45. ResumeLayout(false);
  46. }
  47. #endregion
  48. }
  49. }

3.Form1.cs

  1. namespace _178
  2. {
  3. public partial class Form1 : Form
  4. {
  5. Bitmap? bit;//声明一个Bitmap位图对象
  6. public Form1()
  7. {
  8. InitializeComponent();
  9. }
  10. private void Form1_Load(object sender, EventArgs e)
  11. {
  12. bit = new Bitmap(Properties.Resources.bccd);
  13. bit.MakeTransparent(Color.White); //使用默认的透明颜色对Bitmap位图透明
  14. //bit.MakeTransparent(Color.FromKnownColor(KnownColor.Control));
  15. }
  16. /// <summary>
  17. /// 重载OnPaint方法
  18. /// </summary>
  19. /// <param name="e"></param>
  20. protected override void OnPaint(PaintEventArgs e)
  21. {
  22. e.Graphics.DrawImage(bit!, new Point(0, 0));//在窗体上绘制图片
  23. }
  24. /// <summary>
  25. /// 关闭窗体
  26. /// </summary>
  27. private void Form1_MouseDoubleClick(object sender, MouseEventArgs e)
  28. {
  29. Close();
  30. }
  31. }
  32. }

4.运行效果

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/436577
推荐阅读
相关标签
  

闽ICP备14008679号