用获取路径的方法得到圆形窗体(C#2005)

本文介绍如何使用 C# 和 GDI+ 实现圆形窗口的绘制与交互,包括设置透明背景、绘制圆形路径及调整窗口形状等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Runtime.InteropServices; using System.Windows.Forms; namespace Example007_用获取路径的方法得到圆形窗体 { public partial class Form1 : Form { [DllImport("gdi32")] private static extern IntPtr BeginPath(IntPtr hdc); [DllImport("gdi32")] private static extern int SetBkMode(IntPtr hdc, int nBkMode); const int TRANSPARENT = 1; [DllImport("gdi32")] private static extern IntPtr EndPath(IntPtr hdc); [DllImport("gdi32")] private static extern IntPtr PathToRegion(IntPtr hdc); [DllImport("gdi32")] private static extern int Ellipse(IntPtr hdc, int X1, int Y1, int X2, int Y2); [DllImport("user32")] private static extern IntPtr SetWindowRgn(IntPtr hWnd, IntPtr hRgn, bool bRedraw); [DllImport("user32")] private static extern IntPtr GetDC(IntPtr hWnd); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { IntPtr dc; IntPtr region; dc = GetDC(this.Handle);//得到窗体的绘图操作句柄 BeginPath(dc);//记录路径信息 SetBkMode(dc, TRANSPARENT);//设置为透明模式 Ellipse(dc, 20, 20, 220, 220); EndPath(dc);//记录路径信息 region = PathToRegion(dc);//映射路径信息为区域信息 SetWindowRgn(this.Handle, region, true);//设置窗体的形状为指定区域 } //解决窗体的移动问题。 //通过PreProcessMessage方法筛选后,所有窗体消息都发送到WndProc方法。 //本实例通过重载该方法取到WM_NCHITTEST消息,默认处理后,通过m.Result = (IntPtr)HTCAPTION语句设置消息处理的返回值为HTCAPTION。 //这样用户在窗体中拖动鼠标时,即可以达到和拖动标题栏相同的效果。 const int WM_NCHITTEST = 0x0084; const int HTCLIENT = 0x0001; const int HTCAPTION = 0x0002; protected override void WndProc(ref 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; } } } }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值