创建圆形窗体(源码)

using  System;

using  System.Drawing;

using  System.Collections;

using  System.ComponentModel;

using  System.Windows.Forms;

using  System.Data;

 

namespace  Example007_用获取路径的方法得到圆形窗体

{

    
/// <summary>

    
/// Form1 的摘要说明。

    
/// </summary>


    
public class Form1 : System.Windows.Forms.Form

    
{

        
/// <summary>

        
/// 必需的设计器变量。

        
/// </summary>


        
private System.ComponentModel.Container components = null;

 

        
public Form1()

        
{

            
//

            
// Windows 窗体设计器支持所必需的

            
//

            InitializeComponent();

 

            
//

            
// TODO: 在InitializeComponent 调用后添加任何构造函数代码

            
//

        }


 

        
/// <summary>

        
/// 清理所有正在使用的资源。

        
/// </summary>


        
protected override void Dispose(bool disposing)

        
{

            
if (disposing)

            
{

                
if (components != null)

                
{

                    components.Dispose();

                }


            }


            
base.Dispose(disposing);

        }


 

        
Windows Form Designer generated code

 

        
/// <summary>

        
/// 应用程序的主入口点。

        
/// </summary>


        [STAThread]

        
static void Main()

        
{

            Application.Run(
new Form1());

        }


 

        [System.Runtime.InteropServices.DllImport(
"gdi32")]

        
private static extern IntPtr BeginPath(IntPtr hdc);

 

        [System.Runtime.InteropServices.DllImport(
"gdi32")]

        
private static extern int SetBkMode(IntPtr hdc, int nBkMode);

        
const int TRANSPARENT = 1;

 

        [System.Runtime.InteropServices.DllImport(
"gdi32")]

        
private static extern IntPtr EndPath(IntPtr hdc);

        [System.Runtime.InteropServices.DllImport(
"gdi32")]

        
private static extern IntPtr PathToRegion(IntPtr hdc);

 

        [System.Runtime.InteropServices.DllImport(
"gdi32")]

        
private static extern int Ellipse(IntPtr hdc, int X1, int Y1, int X2, int Y2);

 

        [System.Runtime.InteropServices.DllImport(
"user32")]

        
private static extern IntPtr SetWindowRgn(IntPtr hwnd, IntPtr hRgn, bool bRedraw);

 

        [System.Runtime.InteropServices.DllImport(
"user32")]

        
private static extern IntPtr GetDC(IntPtr hwnd);

 

        
private void Form1_Load(object sender, System.EventArgs e)

        
{

            IntPtr dc;

            IntPtr region;

            dc 
= GetDC(this.Handle);

            BeginPath(dc);

            
//根据路径创建不规则窗体

            SetBkMode(dc, TRANSPARENT);

            
//设置为透明模式

            Ellipse(dc, 
2020220220);

            EndPath(dc);

            region 
= PathToRegion(dc);

            SetWindowRgn(
this.Handle, region, true);

        }


 

        
const int WM_NCHITTEST = 0x0084;

        
const int HTCLIENT = 0x0001;

        
const int HTCAPTION = 0x0002;

        
protected override void WndProc(ref System.Windows.Forms.Message m) //窗体拖动

        
{

            
switch (m.Msg)

            
{

                
case WM_NCHITTEST:

                    
base.WndProc(ref m);

                    
if (m.Result == (IntPtr)HTCLIENT)

                        m.Result 
= (IntPtr)HTCAPTION;

                    
break;

                
default:

                    
base.WndProc(ref m);

                    
break;

            }


 

        }


    }


}


 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值