选择显示字体大小

文本框控件的消息及应用


  ∥谋?或文字)控件是“文本框控件”的简称,它通常用于输入和编辑文字。它属于标准windows编辑控件的一个子类,所以它支持所有编辑控件消息。这儿讲述的技术也适用于由其他厂商设计的,以windows编辑控件类为基础的其他控件。
  本文将介绍文本控件的消息,这些消息显著扩展了控件本身的能力,使我们在程序中能够更灵活的控制控件,不必只仅仅依赖于visual basic所提供的属性或事件,这些消息在进行子类处理中很有用处。下面先介绍控件的消息,然后介绍它们的一些应用。


下表列出了文本控件的常用通知消息:

消息名称消息说明
en_change编辑控件的内容一旦发生改变,就发送这条消息。
en_errspace任何时候只要由于内存不足以完成一项编辑操作,就发送这条消息。
en_hscroll只要用户单击了从属于一个编辑控件的水平滚动条的任何地方,就会发送这条消息。注意这条消息是在控件更新显示之前发送出去的。
en_killfocus一旦控件丢失了输入焦点,则发出这条消息。
en_maxtext只要用户输人的文字试图超出由em_limittext消息规定购界限,或试图超出由vb maxlength属性规定的界限,就会发送这条消息。此外,倘若不允许自动进行水平滚动,同时插入点要超出控件的宽度;或者不允许自动自动滚动,同时插入点要超出接件的高度,那么也会触发这条消息。
en_setfocus一旦控件接收到了输入焦点,就发出这条消息。
en_updateen_vscroll只要用户单击了从属于一个编辑控件的垂直滚动条的任何地方,就会发送这条消息。注意这条消息是在控件更新显示之前发送出去的。

下表列出了文本控件的常用消息:
消息名称消息说明
em_canundo 决定前一次编辑操作是否能够撤消
em_emptyundobuffer 清除控件的撤消缓冲区,使其不可能撤消前一次编辑操作
em_undo 撤消前一次编辑操作
em_fmtlines 决定是否在取回的文本宇串中包含软回车字符
em_getlimittext 获取一个编辑控件中文本的最大长度
em_getmargins 获取编辑控件的左、右边距(不得用于nt3.51)
em_getrect 获取一个编辑控件的格式化矩形
em_limittext 限制编辑耀件甲购文本长度
em_setlimittext 限制编辑控件中的文本长度(不得用于nt3.51)
em_setmargins 设置编辑控件的左、右边距(不得用于nt3.51)
em_setrect 为一个编辑控件设置格式化矩形
em_setrectnp 与em_setrect类似,只是控件此时不会重画
em_settabstops 设置编辑控件中的制表站间距
em_charfrompos 判断编辑控件指定位置处的字符(不适用于nt3.51)
em_getfirstvisiblein 判断编辑控件中显示的第一行
em_getline 从编辑控件取回…行的内容
em_getlinecount判断一个编辑控件的总行数
em_getmodify 判断编辑控件的内容是否已发生变化
em_getpasswordchar 取得编辑控件的密码字符
em_getsel 判断编辑控件中一段选定内容的起点与终点
em_linefromchar 判断是哪一行显示了某个特殊字符
em_lineindex 判断指定行第一个字符的编号
em_linelength 判断一行长度
em_linescroll 滚动编辑控件
em_posfromchar 判断指定字符在编辑控件的位置(用于nt3.51)
em_replacesel 用指定文本替换编辑控件中的当前选定内容
em_setmodify 用于设置或清除一个编辑控件的修改标志
em_setpasswordchar 为指定的控件设置密码字符
em_readonly 决定是否将编辑控件设为只读
em_setsel 设置编辑控件中一段选定内容的起点一终点

下面将介绍文本框控件消息的一些应用:


下面的函数将返回控件的文本行数,如果控件的文本为空也会返回1。
function getlinecount(ctextbox as textbox) as long
  getlinecount = sendmessage(ctextbox.hwnd, em_getlinecount, 0, 0)
end function


下面的函数将返回控件中显示的第一行的行号。
function getfirstvisableline(ctextbox as textbox) as long
  getfirstvisableline = sendmessagebynum(ctextbox.hwnd, em_getfirstvisibleline, 0, 0)
end function


下面的函数将返回控件能显示的行数。
function getvisiblelines(ctextbox as textbox) as long
dim rc as rect
dim hdc&, lfont&, oldfont&
dim di&, lc&
dim tm as textmetric
 lc = sendmessage(ctextbox.hwnd, em_getrect, 0, rc)
 lfont = sendmessage(ctextbox.hwnd, wm_getfont, 0, 0)
 hdc = getdc(ctextbox.hwnd)
 if lfont $#@60;$#@62; 0 then oldfont = selectobject(hdc, lfont)
  di = gettextmetrics(hdc, tm)
 if lfont $#@60;$#@62; 0 then lfont = selectobject(hdc, oldfont)
  getvisiblelines = (rc.bottom - rc.top) / tm.tmheight
  di = releasedc(ctextbox.hwnd, hdc)
end function
  下面的函数能够滚动控件,不过在滚动之前最好判断控件的文本行数和能够显示的行数,以免滚动时发生混乱。函数sendmessagebynum是一个sendmessage函数的安全声明函数,其定义与sendmessage函数完全相同,只是函数名不同。
function scrolltextbox(ctextbox as textbox, nval as long, _
optional nvertical as boolean = true) as long
 if nvertical then
  scrolltextbox = sendmessagebynum(ctextbox.hwnd, em_linescroll, 0, nval)
 else
  scrolltextbox = sendmessagebynum(ctextbox.hwnd, em_linescroll, nval, 0)
 end if
end function
下面的函数能够返回控件指定行的文本。sendmessagebystring与sendmessagebynum类似。
function getl.netext(ctextbox as textbox, lineindex as long) as string
 dim lc&, linechar&
 linechar = sendmessagebynum(ctextbox.hwnd, em_lineindex, lineindex, 0)
 lc = sendmessagebynum(ctextbox.hwnd, em_linelength, linechar, 0) + 1
 getl.netext = string$(lc + 2, 0)
 mid$(getl.netext, 1, 1) = chr(lc and &hff)
 mid$(getl.netext, 2, 1) = chr(lc \ &h100)
 lc = sendmessagebystring(ctextbox.hwnd, em_getline, lineindex, getl.netext)
 getl.netext = left(getl.netext, lc)
end function
下面的函数可以设置控件的左边距。
public const em_setmargins& = &hd3
public const ec_leftmargin& = &h1
function setmargins(ctextbox as textbox, nval as long) as long
 setmargins = sendmessagebynum(ctextbox.hwnd, em_setmargins, ec_leftmargin, nval)
end function


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons