文本显示尺寸计算(关于控件的尺寸定义)
来源:互联网 发布:淘宝店铺刷收藏怎么刷 编辑:程序博客网 时间:2024/04/29 22:22
WM系统的特点之一就是:尺寸比较小。因此,在UI设计时,控件大小、位置、布局,就显得尤为重要,力求在有限的空间中,完整的显示文本信息。之前提到的跑马灯控件,也是类似的功能。
用于文本显示的,主要有两种控件:LABEL和TEXTBOX。这两种控件,在一定程度上,都支持自动换行。但是要使其显示完整信息,就必须定义一个合适的尺寸(LABEL显示高度不够时,文字被遮蔽,TEXTBOX则会显示滚动条)。
情况一、LABEL不换行,但需要显示完整的内容,即动态设置LABEL的长度。
在NET2.0的桌面系统中,可以用以下方法:
TextRenderer.MeasureText 方法 (String, Font)
在使用指定字体绘制时,提供指定文本的尺寸(以像素为单位)。
NETCF可以用以下方式:
Graphics g = this.CreateGraphics();
SizeF siF = g.MeasureString(内容, 字体);
label2.Width = (int)siF.Width;
情况二、在LABEL显示时,需要自动换行,并根据实际高度,设置控件的尺寸。
思路,计算出一行显示需要的尺寸,除以希望每行显示的尺寸,得到行数。 再根据行数得到高度。
情况三、在TEXTBOX中,根据文本,需要计算文本需要显示的高度。
一般思路,文字的FONT决定了高度,只要知道行数,就可以得到需要显示的高度了。但是,用topic.Font.Height当行数很多时存在误差。 所以, 要获得一行文字所占的实际高度,需要借鉴Graphics方法。
以下是获得行数的方法(获得行数的方法,只支持2005):
[DllImport("coredll.dll")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, string lParam);
private void button1_Click(object sender, EventArgs e)
{
//获得TEXTBOX中文本的实际高度
int EM_GETLINECOUNT = 0x00BA;//获取总行数的消息号
int lc = SendMessage(this.textBox1.Handle, EM_GETLINECOUNT, IntPtr.Zero, "");//行数
Graphics g = this.CreateGraphics();
SizeF siF = g.MeasureString("TEST", textBox1.Font);
g.Dispose();
int sf = (int)siF.Height * lc;
this.textBox1.ClientSize = new Size(this.textBox1.ClientSize.Width, sf + 5);
}
针对2003获得行数,需要下面的方法(获得控件句柄):
[DllImport("coredll.dll")]
private static extern IntPtr GetFocus();
IntPtr hWnd = GetFocus();
int lc3 = SendMessage(hWnd, EM_GETLINECOUNT, IntPtr.Zero, "");//行数
- 文本显示尺寸计算(关于控件的尺寸定义)
- 计算Label的文本尺寸
- iOS计算文本尺寸
- iOS7计算文本尺寸
- TeX中计算文本尺寸的问题
- IOS7中计算文本的尺寸
- 计算控件尺寸
- 计算控件尺寸
- 计算控件尺寸
- 计算控件尺寸
- Android 计算控件尺寸
- 【view】计算控件尺寸
- Android 计算控件尺寸
- Android 计算控件尺寸
- 根据Html文本设置控件的尺寸
- iOS7计算文本尺寸新方法
- iOS7计算文本尺寸新方法
- iOS7计算文本尺寸新方法
- 请还在使用tomcat5.0的朋友尽快换版本吧!
- Windows CE中的中断机制
- 用户界面规范
- 让Web创意十足
- 关于查询顺序
- 文本显示尺寸计算(关于控件的尺寸定义)
- 开天眼,顿悟软件设计之道
- LCOV 简介(翻译)
- Ajax.net Sys未定义错误解决办法
- MFC中自定义消息
- 1:100:10000……
- 不使用表生成行
- 消息循环
- 不安生