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) / ;
screenY -= (child.Height - child.ClientRectangle.Height - windowBorder);
p.X = screenX - windowBorder;
p.Y = screenY;
return p;
}
else
{
return GetPoint(screenX, screenY, child.Parent);
}
}
winform 如何正确的获取窗体的标题栏高度的更多相关文章
- C#winform窗体如何通过windowApi的FindWindow函数获取窗体句柄
在同一个程序里,传统方式是通过this来设置当前窗体的最大化.最小化等操作, 那么怎样通过窗体句柄来设置窗体的最大化.最小化呢? 1.界面布局 通过this设置窗体最大化: name:btnWindo ...
- Winform中如何实现父窗体传递数据到子窗体并刷新子窗体
原理:利用委托和事件,本文将以图文并茂的例子讲述,告诉我们So Easy --------------------------------------------------------------- ...
- Android获取状态栏高度、标题栏高度、编辑区域高度
一.Activity界面的划分 简单说明一下(上图Activity采用默认Style,状态栏和标题栏都会显示):最大的草绿色区域是屏幕界面,红色次大区域我们称之为"应用程序界面区域" ...
- JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄
前言 最近一段时间研究谷歌浏览器内核.谷歌浏览器内核一直开源,并维护更新,它的开源项目中内核更新速度和Chrome浏览器版本更新进度一样!而且它不同于WebKit(值得一题的是谷歌浏览器已不使用Web ...
- paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制
源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: ...
- Android 4.0以后正确的获取外部sd卡存储目录
刚解决这个棘手的问题 找了很久,随笔记下. 网上搜索 android 获取外部sd卡存储目录 普遍都是: 1) Environment.getExternalStorageDirectory() 这个 ...
- Android之获取屏幕的尺寸像素及获取状态栏标题栏高度
在Android的实际开发中,会经常用到获取屏幕的尺寸的问题,以便设置一些布局在屏幕上的固定位置,从而适配各个屏幕的设备. 今天我就来讲一下怎么得到当前设备的屏幕像素吧: 一.在Activity中: ...
- winform 控件大小随着窗体自适应
3个方法: #region 控件缩放变量 double formWidth;//窗体原始宽度 double formHeight;//窗体原始高度 doubl ...
- C#调用页面中的窗体中的方法,获取窗体的元素。
页面中的窗体 <div class="div_width" style="width: 100%; height: 95%;"> <ifram ...
随机推荐
- Tiny210用户手册笔记
核心板 CPU 处理器: Samsung S5PV210,基于 CortexTM-A8,运行主频 1GHz 内置 P ...
- android手机尺寸相关p107-p110
1.ldpi-----240x320-----密度120 mdpi-----320x480-----密度160 hdpi-----480x800-----密度240 xhdpi-----720x128 ...
- Android 反编译 -smali语法
前言 前面我们有说过android反编译的工具,如何进行反编译.反编译后可以得到jar或者得到smali文件.Android采用的是java语言 进行开发,但是Android系统有自己的虚拟机Dalv ...
- Lua基础---lua字符串库函数详解,实例及正则表达式
参考这个网友写的,比较简单容易理解. http://blog.csdn.net/wlgy123/article/details/49206183
- Leetcode 1018. Binary Prefix Divisible By 5
class Solution: def prefixesDivBy5(self, A: List[int]) -> List[bool]: ans,t = [],0 for a in A: t ...
- php语法笔记
1. php中设置页面的编码方式: header(“content-type:text/html;charset=utf-8”); 2. 数据类型 布尔类型:Boolean/bool:true.f ...
- 使用Kali Linux执行中间人攻击(演示)
中间人攻击也叫Man-In-The-Middle-Attack. 我假设你已经知道中间人攻击的基本概念,引用一段wikipedia: 中间人攻击(Man-in-the-middle attack,缩写 ...
- 用ofstream/ifstream 读写Unicod的TXT
使用的平台:vs2013 控制台 from: http://bbs.csdn.net/topics/360229403 xiayuanzhong: ofstream ofs( "test.t ...
- php 中的杂项函数
1.$arr = range(1, 10); print_r($arr); Array( [0] => 1 [1] => 2 [2] => 3 [3] = ...
- phpcms URL
http://www.jb51.net/cms/112109.html 静态URL生成规则 http://v9.help.phpcms.cn/html/2010/database_1228/107.h ...