界面编程之用获取路径的方法得到圆形窗体

    技术2022-05-11  68

    1. 新建一个工程demo

    2. 添加以下引用:

     

    [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);

    2. 添加窗体的Load方法:

     

    private   void  用获取路径的方法得到圆形窗体_Load( object  sender, System.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);            }

     

    4. 最后在添加一些函数和变量即可。

     

             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;            }        }

    最新回复(0)