zoukankan      html  css  js  c++  java
  • WinForm自定义标题栏(再续)

    今天在网上找到看到一篇博客<<C#改变无边框窗体大小>>,说的是WinForm的FormBorderStyle=None时如何在运行时调整窗体的大小,我之前的做法是通过判断像素来调整鼠标的样式,然后在改变窗体的大小,这边文章说的是通过重载窗体默认的系统消息来实现该功能,文章非常好…

    转载自:http://www.beijibear.com/article/10-09/cheongyuhin5.html

    const intWM_NCHITTEST = 0x0084;
    const intHTLEFT = 10;    //左边界

    const intHTRIGHT = 11;   //右边界
    const intHTTOP = 12; //上边界
    const intHTTOPLEFT = 13; //左上角
    const intHTTOPRIGHT = 14;    //右上角
    const intHTBOTTOM = 15;  //下边界
    const intHTBOTTOMLEFT = 0x10; //左下角
    const intHTBOTTOMRIGHT = 17; //右下角

    protected override voidWndProc(refMessagem)
    {
        base.WndProc(refm);
        switch(m.Msg)
        {
            caseWM_NCHITTEST:
            {
                PointvPoint = newPoint((int)m.LParam & 0xFFFF,(int)m.LParam >> 16 & 0xFFFF);
                vPoint = PointToClient(vPoint);
                //判断:仅当当前窗体状态不是最大化时,相关鼠标事件生效
              
    if(this.WindowState != FormWindowState.Maximized)
                {
                    if(vPoint.X < 10)
                    {
                        if(vPoint.Y < 10)
                        {
                            m.Result = (IntPtr)HTTOPLEFT;
                        }
                        else if(vPoint.Y > this.Height - 10)
                        {
                            m.Result = (IntPtr)HTBOTTOMLEFT;
                        }
                        else
                      
    {
                            m.Result = (IntPtr)HTLEFT;
                        }
                    }
                    else if(vPoint.X > this.Width - 10)
                    {
                        if(vPoint.Y < 10)
                        {
                            m.Result = (IntPtr)HTTOPRIGHT;
                        }
                        else if(vPoint.Y > this.Height - 10)
                        {
                            m.Result = (IntPtr)HTBOTTOMRIGHT;
                        }
                        else
                      
    {
                            m.Result = (IntPtr)HTRIGHT;
                        }
                    }
                    else if(10 < vPoint.X && vPoint.X < this.Width - 10)
                    {
                        if(vPoint.Y < 10)
                        {
                            m.Result = (IntPtr)HTTOP;
                        }
                        else if(vPoint.Y > this.Height - 10)
                        {
                            m.Result = (IntPtr)HTBOTTOM;
                        }
                    }
                }
                break;
            }
        }
    }

    将窗体的Padding中将所有的值,均设为1即可(或更大,只要不为0就行。当然,数值越大,也意味着窗体四周的“露白”越多,同时,在调整大小时,也会越容易被鼠标“捕捉”到。一般来说,窗体的左、右边框容易被捕捉

    吐舌笑脸

  • 相关阅读:
    二、java 与 scala相互调用
    Gradle Tips#1-tasks
    Guice 学习(六)使用Provider注入服务( Provider Inject Service)
    C++第15周(春)项目3
    cocos2d-x3.2中怎样优化Cocos2d-X游戏的内存
    jqGrid源代码分析(一)
    OCP-1Z0-051-题目解析-第6题
    PHP连接sql server 2005环境配置
    【剑指offer】替换字符串中的空格
    android 推断Apk是否签名和 签名是否一致
  • 原文地址:https://www.cnblogs.com/wangshuai/p/2212694.html
Copyright © 2011-2022 走看看