winform 如何正確的獲取窗體的標題欄高度


最近我需要知道鼠標在一個控件里的相對位置,鼠標相對於屏幕的位置我是可以知道的,所以只要得到控件相對於屏幕的位置,就可以算出鼠標相對於控件的位置了

但是發現有誤差

后來經過測試是由於窗體的標題欄高度導致的

所以減去了窗體的標題欄高度,但是還是有細微的誤差

最后經過分析,是由於獲取標題欄高度不正確導致的,當搜索如何獲取標題欄高度時 所有的答案都是child.Height - child.ClientRectangle.Height,這個做法其實是有誤差的,誤差甚至有10像素只差

正確的做法是

現先獲取窗體邊框寬度

 int windowBorder = (child.Width - child.ClientRectangle.Width) / 2;

再減去窗體邊框高度
screenY -= (child.Height - child.ClientRectangle.Height - windowBorder);

 

獲取控件左上角相對於屏幕的位置

        /// <summary>
        /// 獲取鼠標坐標 相對於視圖
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="child"></param>
        /// <returns></returns>
        private Point GetPoint(int x, int y, Control child)
        {
            Point p = new Point();
            int screenX = x;
            int screenY = y;
            screenX -= child.Left;
            screenY -= child.Top;
            if (child.Parent == null)
            {
                int windowBorder = (child.Width - child.ClientRectangle.Width) / 2;
                screenY -= (child.Height - child.ClientRectangle.Height - windowBorder);
                p.X = screenX - windowBorder;
                p.Y = screenY;
                return p;
            }
            else
            {
                return GetPoint(screenX, screenY, child.Parent);
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM