zoukankan      html  css  js  c++  java
  • WINFROM 无边框窗体的移动和改变大小

    因为去掉了边框  移动和调整大小都用不了了,可以调用WIN32的API来实现

    1.定义必须常量

            const int Guying_HTLEFT = 10;
            const int Guying_HTRIGHT = 11;
            const int Guying_HTTOP = 12;
            const int Guying_HTTOPLEFT = 13;
            const int Guying_HTTOPRIGHT = 14;
            const int Guying_HTBOTTOM = 15;
            const int Guying_HTBOTTOMLEFT = 0x10;
            const int Guying_HTBOTTOMRIGHT = 17;

    2.重写系统函数

            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    //更改窗口大小的现实
                    case 0x0084:
                        base.WndProc(ref m);
                        Point vPoint = new Point((int)m.LParam & 0xFFFF,
                            (int)m.LParam >> 16 & 0xFFFF);
                        vPoint = PointToClient(vPoint);
                        if (vPoint.X <= 5)
                            if (vPoint.Y <= 5)
                                m.Result = (IntPtr)Guying_HTTOPLEFT;
                            else if (vPoint.Y >= ClientSize.Height - 5)
                                m.Result = (IntPtr)Guying_HTBOTTOMLEFT;
                            else m.Result = (IntPtr)Guying_HTLEFT;
                        else if (vPoint.X >= ClientSize.Width - 5)
                            if (vPoint.Y <= 5)
                                m.Result = (IntPtr)Guying_HTTOPRIGHT;
                            else if (vPoint.Y >= ClientSize.Height - 5)
                                m.Result = (IntPtr)Guying_HTBOTTOMRIGHT;
                            else m.Result = (IntPtr)Guying_HTRIGHT;
                        else if (vPoint.Y <= 5)
                            m.Result = (IntPtr)Guying_HTTOP;
                        else if (vPoint.Y >= ClientSize.Height - 5)
                            m.Result = (IntPtr)Guying_HTBOTTOM;
                        break;
                    //移动窗口的实现
                    case 0x0201:                //鼠标左键按下的消息 
                        m.Msg = 0x00A1;         //更改消息为非客户区按下鼠标 
                        m.LParam = IntPtr.Zero; //默认值 
                        m.WParam = new IntPtr(2);//鼠标放在标题栏内 
                        base.WndProc(ref m);
                        break;
                    default:
                        base.WndProc(ref m);
                        break;
                }
            }

    完整代码
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            const int Guying_HTLEFT = 10;
            const int Guying_HTRIGHT = 11;
            const int Guying_HTTOP = 12;
            const int Guying_HTTOPLEFT = 13;
            const int Guying_HTTOPRIGHT = 14;
            const int Guying_HTBOTTOM = 15;
            const int Guying_HTBOTTOMLEFT = 0x10;
            const int Guying_HTBOTTOMRIGHT = 17;
            public Form1()
            {
                InitializeComponent();
            }
            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    //更改窗口大小的现实
                    case 0x0084:
                        base.WndProc(ref m);
                        Point vPoint = new Point((int)m.LParam & 0xFFFF,
                            (int)m.LParam >> 16 & 0xFFFF);
                        vPoint = PointToClient(vPoint);
                        if (vPoint.X <= 5)
                            if (vPoint.Y <= 5)
                                m.Result = (IntPtr)Guying_HTTOPLEFT;
                            else if (vPoint.Y >= ClientSize.Height - 5)
                                m.Result = (IntPtr)Guying_HTBOTTOMLEFT;
                            else m.Result = (IntPtr)Guying_HTLEFT;
                        else if (vPoint.X >= ClientSize.Width - 5)
                            if (vPoint.Y <= 5)
                                m.Result = (IntPtr)Guying_HTTOPRIGHT;
                            else if (vPoint.Y >= ClientSize.Height - 5)
                                m.Result = (IntPtr)Guying_HTBOTTOMRIGHT;
                            else m.Result = (IntPtr)Guying_HTRIGHT;
                        else if (vPoint.Y <= 5)
                            m.Result = (IntPtr)Guying_HTTOP;
                        else if (vPoint.Y >= ClientSize.Height - 5)
                            m.Result = (IntPtr)Guying_HTBOTTOM;
                        break;
                    //移动窗口的实现
                    case 0x0201:                //鼠标左键按下的消息 
                        m.Msg = 0x00A1;         //更改消息为非客户区按下鼠标 
                        m.LParam = IntPtr.Zero; //默认值 
                        m.WParam = new IntPtr(2);//鼠标放在标题栏内 
                        base.WndProc(ref m);
                        break;
                    default:
                        base.WndProc(ref m);
                        break;
                }
            }
        }
    }
    
    
    
     
  • 相关阅读:
    SqlHelper
    asp.net中窗口相关操作总结(javascript)
    ASP.NET顯示對話框
    为ASP.NET控件添加常用的JavaScript操作
    右键弹出菜单
    log4net的初使用
    QQ/MSN右下角弹出提示窗口
    简便无刷新文件上传系统
    简单的自动更新程序实
    SQL中的单记录函数
  • 原文地址:https://www.cnblogs.com/xdoudou/p/3431070.html
Copyright © 2011-2022 走看看