解决方案

SendMessage 详解

seo靠我 2023-09-23 08:11:56

http://www.cnblogs.com/rosesmall/p/3248244.html

窗体操作;控件;文本;系统操作等等.

SendMessage函数的常用消息及其应用(有点长,希望能对大家有所SEO靠我帮助)

函数原型:

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _

ByVal wSEO靠我Msg As Long, ByVal wParam As Long, lParam As Any) As Long

  其中四个参数的含义和说明如下:

1.hWnd:

对象的句柄。希望将消息传送给哪个对象,就把SEO靠我该对象的句柄作为实参传送,在 VB 中可以简单地

用“对象.hWnd”获得某个对象的句柄,如 Text1.hWnd和 Form1.hWnd分别可以得到 Text1和Form1的句

柄。它是一个长整型数。WSEO靠我indows给每个控件一个编号,这个编号就称为窗口句柄。有了这个句柄,我们

就可告诉 Windows 我们要控制哪个控件,所以这个句柄在 API 调用中至关重要。VB 的大多数控件都包

括hwnd属性,如SEO靠我下拉框、TreeView等,窗体也有这个属性。但也有一些控件没有这个属性,如标签控件。

没有这个属性就无法利用Windows API函数,但可以节省系统资源。

2.wMsg:

被发送的消息。根据具体需求和不SEO靠我同的对象,将不同的消息作为实参传送,以产生预期的动作。使

SendMessage 传递消息,大多是为了完成以下几个工作: 

①设置控件的一些选项,象我们要使用的CB_SETDROPPEDWIDTH的就属于这SEO靠我种情况。尽管VB的每个控

件都提供了许多属性,但仍然有许多控件的选项没有包括在其中。而这些选项中的大多数都可以利用该

函数进行设置。

②获得控件的一些设置。同上一种情况相反,有时我们需要获得控件的一些设置,SEO靠我相当于读取属性。

例如,如果想知道一个下拉框的下拉部分的宽度是多少,就可以向控件发送CB_GETDROPPEDWIDTH消息。

对于这种情况,SendMessage函数的返回值就是结果。 

③执行一定的操作。SEO靠我例如,我们要在下拉框中寻找是否有“ABC”这个字符串,当然,我们可以编写

一个循环,逐条比较看是否存在这样的字符串。如果使用API,我们只需要向下拉框发送CB_FINDSTRING

消息,这条消息就会自动SEO靠我进行查找工作并返回结果。

  ④模拟用户操作。我们有时希望模拟用户的操作,比如关闭其他应用程序的窗口。其实只要我们能知

道那个窗口的句柄,我们就可以发送WM_CLOSE消息给那个窗口,窗口接受到这条消息就会关SEO靠我闭,如同用户

关闭窗口一样。

3.wParam、4.lParam:

  附加的消息信息。这两个是可选的参数,用来提供关于wMsg消息更多的信息,不同的wMsg可能使用这

两个参数中的0、1或2个,如果不需要哪个附SEO靠我加参数,则将实参赋为NULL(在VB中赋为0)。

  lParam定义为Any类型。指定 Any类型可禁止VB进行类型检查,从而允许将任意数据类型传递给该过

程。由于每条消息对参数的类型和传递方式的要求都不同SEO靠我:有的可能要求为Long型,有的可能要求为自定

义类型;大多数要求按传值方式传递,但也有一些要求按传地址方式。为了满足各种要求,我们将这个参

数定义为Any类型。比如,我们要传递一个Long型变量lDatSEO靠我a。如果消息要求传地址方式传递,可以使用:

  SendMessage ……, lData 

  而如果要求传值方式传递,则使用 

  SendMessage ……, ByVal lData 

如果传递常数,我们则需要使用类型SEO靠我后缀来指定常数的类型,比如"0&",表示Long型的常数0,如

  SendMessage ……, ByVal 0& 

  我们也可以使用类型转换函数CLng将常数指定为Long型,如CLng(0)。

程序中,有时定SEO靠我义 lParam As Any,有时定义 ByVal lParam As String。这是为什么呢?对于

SendMessage函数,lParam的使用是很灵活的,在一般情况下,lParam是一个指针SEO靠我,它指向的数据类型

有三种:长整形、自定义数据结构类型、字符串类型。对于前两种类型,需要将 lParam定义为 lParam

As Any,从而将 lParam 数据的指针传递到 SendMessage SEO靠我函数。对于字符串类型,则需要定义 Byval

lParam As String,因为字符串类型数据不同,只有定义 ByVal,得到的才是字符串的指针,如果没有

ByVal,得到的将是指向字符串指针的指针。SEO靠我另外对于少数的消息来说,SendMessage 函数需要的只是

lParam 本身的值,这时就需要将 lParam定义为 Byval lParam As Long,或者在程序调用时在 lParam

之前加SEO靠我 ByVal。

  当用户在编辑控件上进行各种操作时,其父窗口将收到 WM_COMMAND 通知消息,lParam带控件句柄

(hWnd),同时 wParam 的低16位带控件的 ID,高16位带有如下表的消SEO靠我息代码:

常用编辑控件消息:

EC_LEFTMARGIN(&H1) EC_USEFONTINF 设置左边距时使用

EC_RIGHTMARGIN EC_USEFONTINF 设置右边距时使用

EC_USEFONSEO靠我TINF,O,边距 设置编辑控件的左、右边距,当wParam含EC_LEFTMARGIN时在lParam的低16位指定左边距点数,当wParam含EC_RIGHTMARGIN时在lParam的高16位SEO靠我指定右边距点数。当指定wParam为EC_USEFONTINFO时,则用当前字体的字符"A"的宽度指定右边距和字符"C"的宽度指定左边距lParam被忽略。

EM_CHARFROMPOS(&HD7=21SEO靠我5),0, 取得编辑控件中指定位置的字符相对于文本头部的偏移量。使用本操作应先在第4个参数的高16位指定行号,低16位指定列号(或一个POINTAPI结构),行列是按编辑控件的客户区左上角为原点(0,SEO靠我0)计算的。如果指定的位置超出控件客户区则返回-1

EM_CANUNDO(&HC6=198),0,0   决定前一次编辑操作是否能够撤消:检测控件撤消缓冲区是否为空,通常控件把最后一次在控件的编辑操作保SEO靠我存在一个撤消缓冲区,如果缓冲区非空则返回TRUE表示上次操作可以撤消,否则返回FALSE,应用程序可以利用该返回值来禁止或允许菜单或工具条的"撤消"项。

EM_EMPTYUNDOBUFFER(&HCD=SEO靠我205 ),0,0 清除控件的撤消缓冲区,使其不能撤消前一次编辑操作

EM_FMTLINES(&HC8=200)   决定是否在取回的文本宇串中包含软回车字符

EM_GETFIRSTVISIBLEINE(SEO靠我&HCE=206),0,0 获得文本控件中处于可见位置的最顶部的文本所在的行号

EM_GETLINE(&HC4=196 ),行号,ByVal 变量 获取编辑控件某一行的内容,变量须预先赋空格

EM_GETSEO靠我LINECOUNT(&HBA=186,0,0 获取编辑控件的总行数

EM_GETMODIFY(&HB8=184),0,0  判断编辑控件的内容是否已发生变化,返回TRUE则控件文本已被修改,返回FALSSEO靠我E则未变。

EM_GETPASSWORDCHAR( ),0,0  获取编辑控件的密码字符,返回NULL表示没有字符

EM_GETRECT(&HB2=178),0,结构   获取编辑控件的格式化矩形

EM_GSEO靠我ETTHUMB(&HBE=190),0,0 取得多行文本编辑控件的滚动框的当前位置(注意:是象素值)

EM_GETSEL(&HB0=176),0,变量 获取光标位置(以字节数表示),或:(缓冲区起点,缓SEO靠我冲区终点)取得编辑控件中选定内容的范围,返回值中低16位为起点,高16位为终点

EM_GETHANDLE(&HBD=189),0,0 取得文本缓冲区

EM_GETWORDBREAKPROC(&HD1=20SEO靠我9),0,0 取得整字换行回调函数EditWordBreakProc指针

EM_GETLIMITTEXT(WM_USER+37=1061),0,0 获取一个编辑控件中文本的最大长度 

EM_GETMARGISEO靠我NS( ),0,0 获取编辑控件的左、右边距,返回值低16位为左边距,高16位为右边距(不得用于NT3.51)

EM_LIMITTEXT(&HC5=197),最大值,0 设置编辑控件中的文本长度

EM_SSEO靠我CROLLCARET(&HB7=183),0,0 把可见范围移至光标处

EM_LINEFROMCHAR(&HC9=201),偏移值,0 获取指定位置(或:-1,0 表示光标位置)所在的行号

EM_LINESEO靠我INDEX(&HBB=187),行号,0 获取指定行(或:-1,0 表示光标所在行)首字符在文本中的位置(以字节数表示)

EM_LINELENGTH(&hC1=193),偏移值,0 获取指定位置所在行(SEO靠我或:-1,0 表示光标所在行)的文本长度(以字节数表示)

EM_POSFROMCHARPOINT,结构地址,偏移值 取得指定字符位置的行列号,偏移值是字符相对于文本头部的偏移。

EM_LINESCROLLSEO靠我(&HB6=182),列数,行数 指定行数的文本水平滚动,每次滚动N列

EM_EXGETSEL(&H434=1076)

EM_EXSETSEL(&H437=1079),0,结构 RichEdit控件设置文SEO靠我本选定范围,参阅 EM_SETSEL 消息,结构是指 CHARRANGE 结构

EM_PASTESPECIAL(&H440=1088),2(1),1 RichEdit控件粘贴剪贴板中的位图(或文本)

EMSEO靠我_FINDTEXT(&H738=1080) RichEdit控件正文搜索操作

EM_FINDTEXTEX(&H44F=1103) 同上

EM_SETTEXTEX(&H461=1121) RichEdit控SEO靠我件正文替换/插入操作

EM_SETTARGETDEVICE, GetDC(RichText.hWnd), RichText.Width / 15)设置 RichTextBox 自动换行,后续代码是:RiSEO靠我chText.RightMargin = iif(RichText.RightMargin = 0,1,0)

EM_SETTARGETDEVICE, 0, 1 设置 RichTextBox 不自动换行

ESEO靠我M_POSFROMCHAR(&HD6或&H426) 判断指定字符在编辑控件的位置(用于NT3.51)

EM_SCROLL(&HB5=181),*,0 文本垂直滚动。第三个参数*控制滚动方向:SB_LINSEO靠我EDOWN(1)向下滚动一行,SB_LINEUP(0)向上滚动一行,SB_PAGEDOWN(3)向下滚动一页,SB_PAGEUP(2)向上滚动一页。

EM_REPLACESEL(&HC2=194),1(SEO靠我0),字符串 用指定字符串替换编辑控件中的当前选定内容,如果第三个参数wParam为1,则本次操作允许撤消,0禁止撤消。字符串可用传值方式,也可用传址方式(例:SendMessage Text1.hwSEO靠我nd, EM_REPLACESEL, 0, Text2.Text 这是传值方式)

EM_SETSEL(&HB1=177),起点,终点 设置编辑控件中文本选定内容范围(或设置光标位置),该范围被反相显示,SEO靠我用于为复制、替换、粘贴、剪切、删除等编辑功能指定范围,光标将被移至指定的终点后面。还可使用指定相同起点和终点来移动光标而不是选定范围。当指定的起点等于0和终点等于-1时,文本全部被选中,此法常用在清空SEO靠我编辑控件。当指定的起点等于-2和终点等于-1时,全文均不选,光标移至文本未端,此法常用在文本未端追加内容。注意:当控件没有输入焦点时,本操作将会失败,一般在执行本操作前都应调用SetFocus先取得输SEO靠我入焦点。

EM_UNDO(&HC7=199),0,0 撤消前一次编辑操作,当重复发送本消息,控件将在撤消和恢复中来回切换

EM_SETCHARFORMAT(&H444) 改变选定文本的颜色

EM_SETHASEO靠我NDLE(&HBC=188),缓冲区指针,0 为编辑控件指定新的文本缓冲区。此操作仅适用对话框创建带DS_LOCALEDIT风格的控件。

EM_SETLIMITTEXT,长度(字节),0 设置编辑控件中SEO靠我的文本最大长度(不得用于NT3.51)

EM_SETMARGINS(&HD3=211) 设置编辑控件的左、右边距(不得用于NT3.51)

EM_SETMODIFY(&HB9=185),1(0),0 设置或SEO靠我清除一个编辑控件的修改标志

EM_SETPASSWORDCHAR(&HCC=204),字符,0 指定控件用来显示密码的字符,缺省为"*"。当第三个参数wParam为0时,本操作将清除控件的ES_PASSSEO靠我WORD风格,并按实际字符显示。

EM_SETREADONLY(&HCF=207),1(0),0 决定是否将编辑控件设为只读,同时决定控件的ES_READONLY风格

EM_SETRECT(&HB3=17SEO靠我9),0(或RECT),结构地址 为一个编辑控件设置格式化矩形

EM_SETRECTNP(&HB4=180),0(或RECT),结构地址 为一个编辑控件设置格式化矩形,只是控件此时不会重画

EN_CHANSEO靠我GE(&H300=768) 编辑控件的内容发生改变。与EN_UPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的。

EN_ERRSPACE(&H500=1280) 任何时候只要由于内存不足以完成SEO靠我一项编辑操作

EN_HSCROLL(&H601=1537) 用户单击了编辑控件的水平滚动条。注意:这条消息是在控件更新显示之前发送出去的。

EN_VSCROLL(&H602=1538) 用户单击了编辑控件SEO靠我的垂直滚动条。注意:这条消息是在控件更新显示之前发送出去的。

EN_KILLFOCUS(&H200=512) 编辑控件失去了输入焦点

EN_SETFOCUS(&H100=256) 编辑控件获得了输入焦点

ESEO靠我N_UPDATE(&H400=1024) 控件准备显示改变了的正文时发送该消息。它与EN_CHANGE通知消息相似,只是它发生于更新文本显示出来之前。

EN_MAXTEXT(&H501=1281) 用户SEO靠我输人的文字数超出由EM_LIMITTEXT消息规定的界限,或超出由VB Maxlength属性规定的界限,就会发送这条消息 。此外,倘若不允许自动进行水平滚动,同时插入点要超出控件的宽度;或者不允许自SEO靠我动垂直滚动,同时插入点要超出控件的高度,那么也会触发这条消息。在没有ES_AUTOHSCROLL或ES_AUTOVSCROLL的编辑框中,当正文超出了编辑框的边框时也会发出该消息。

编辑风格消息:

ES_SEO靠我MULTILINE   指定编辑控件能否进行多行文本编辑,若多行编辑器不指定ES_AUTOHSCROLL风格,则会自动换行,用户每按一次Enter,在当前光标处输入一个回车换行符(0Dh,0Ah),文SEO靠我本增加一行。若不指定ES_AUTOVSCROLL,则多行编辑器会在窗口中正文装满时发出警告声响。

ES_LEFT 文本显示居左。

ES_CENTER  文本显示居中。

ES_RIGHT  文本显示居右。

ESSEO靠我_LOWERCASE  把用户输入的字母统统转换成小写字母。

ES_UPPERCASE  把用户输入的字母统统转换成大写字母。

ES_OEMCONVERT  把输入的文本从ANSI码转换成OEM码,然后又SEO靠我转换成ANSI码,目的是保证函数AnsiToOem的正确调用。这在编辑框中包含文件名时是很有用的。

ES_AUTOHSCROLL(自动增加水平滚动条?) 当用户在行尾键入一个字符时,正文将自动向右滚动1SEO靠我0个字符,当用户按回车键时,正文总是滚向左边。

ES_AUTOVSCROLL  当用户在最后一个可见行按回车键时,正文向上滚动一页。

ES_NUMBER  只接收数码输入,其它字符输入一律无效。

ES_NOSEO靠我HIDESEL(&H100=256) 当编辑框失去输入焦点时,选中的文本将隐藏,正文中的选择保持不变。缺省时正文中的选择将失效,当获得输入焦点后才又显示出来。

ES_READONLY  将编辑框设置成只SEO靠我读的。

ES_PASSWORD(&H20=32) 使所有键入的字符都用"*"来显示。

ES_WANTRETURN  使多行编辑器接收回车键输入并换行。如果不指定该风格,按回车键会选择缺省的命令按钮,这往往SEO靠我会导致对话框的关闭。

列表框操作:

LB_FINDSTRING(&H18F=399),-1,ByVal 字串 查找列表项的字符串,返回值=字符串所在的列表项的索引。-1表示从第0行开始查找,如果改为一个有SEO靠我效的列表项索引值,将从该行开始查找。

LB_ITEMFROMPOINT(&H1A9=425) 获取光标所在的列表项的索引

LB_SETHORIZONTALEXTENT(&H194=404),长度,0 设置SEO靠我列表框的横向滚动条以及滚动长度,长度为象素值

组合框操作:

CB_SHOWDROPDOWN(&H14F),1(0),0 打开(关闭)组合框的列表

TVM_SETBKCOLOR(&H1100+29=4381)SEO靠我 设置扩展树型列表控件的背景色(TVM开头的常数)

常用窗口消息:

WM_GETFONT(&H31=49) 得到当前控件绘制文本的字体(的句柄)

WM_GETTEXT(&HD=13),变量长度,变量 取得窗SEO靠我体的标题,变量须预先赋空字串(chr(0)),变量长度=Len(变量)

WM_SETTEXT(&HC=12),0,ByVal "字串" 设置窗体的标题

WM_NCLBUTTONDOWN(&HA1=161)SEO靠我,2,0 在非客户区,即边框及标题栏上(假如定义的是一个组件,则非客户区包括Form等)按下鼠标左键;

WM_LBUTTONDOWN(&H201=513),2,0 在客户区,也就是除边框及标题栏以外按下SEO靠我鼠标左键

WM_VSCROLL(&H115=277),&H10000*p+SB_THUMBPOSITION(&H4),0 同步滚动文本,p是位置改变量

WM_PAINT

WM_USER(&H400=1024SEO靠我)

WM_CUT(&H300=768),0,0 剪切

WM_COPY(&H301=769)),0,0 复制

WM_PASTE(&H302=770)),0,0 粘贴

WM_CLEAR(&H303=771)),0SEO靠我,0 删除

WM_UNDO(&H304=772)),0,0 撤消

按纽消息:

BM_SETSTYLE(&HF4) 设置按纽样式

BS_RADIOBUTTON(&H4) 收音机旋纽式的按纽,是 BM_SETSTSEO靠我YLE 使用的参数

SendMessage函数应用(一)

在Windows系统的很多消息中,有一些不仅仅是提供一个窗口消息那么简单。它们可以控制窗口的

动作和属性。下面向大家介绍SendMessage函数在SEO靠我扩充列表(ListBox)控件功能方面的应用。

  在 Windows 中,有一系列的以 LB_ 开头的列表消息,这里介绍的就是利用LB消息控制的ListBox

的应用。

1、使列表中光标移动到不同的列表项上有SEO靠我不同的提示(ToolTip)

  在列表框控件中有一个 ToolTipText 属性,该属性决定了当光标在列表框上移动时出现的提示文

字。但是如何使得当光标在不同的列表项上移动时的提示文字也不同呢?问题的关键SEO靠我是要知道在光标移

动时光标所在的列表项的索引,使用SendMessage函数发送 LB_ITEMFROMPOINT 消息就可以获得。

在 Form1 中加入一个 ListBox 控件,运行程序,当光标在列SEO靠我表中移动时,可以看到根据光标所在

的不同的列表项,提示文字也不相同。代码如下(我已试验成功):

Const LB_ITEMFROMPOINT = &H1A9

Private Sub Form_Load()

DSEO靠我im ZXS As Long

Drive1.Drive = "G:": Dir1.Path = "G:\一江秋水的文档"

Combo1.Text = Combo1.List(0)

ZXS = SendMesSEO靠我sage(Text1.hwnd, 186, 0, 0)

Label1.Caption = "共 " & ZXS & " 行," & Len(Text1.Text) & " 字"

For i = 1 To SEO靠我200: List1.AddItem Str(i) + " 列表框试验项目": Next

End Sub

Private Sub List1_MouseMove(Button As Integer, ShSEO靠我ift As Integer, X As Single, Y As Single)

Dim lXPoint As Long, lYPoint As Long, lIndex As Long

If ButtSEO靠我on = 0 Then 确定在移动鼠标的同时没有按下功能键或者鼠标键

lXPoint = CLng(X / Screen.TwipsPerPixelX) 获得光标的位置,以像素为单位

lYPoint = SEO靠我CLng(Y / Screen.TwipsPerPixelY)

With List1

lIndex = SendMessage(.hwnd, LB_ITEMFROMPOINT, 0, ByVal ((lYSEO靠我Point * 65536) + lXPoint)) 获得光标所在的标题行的索引

If lIndex < .ListCount Then .ToolTipText = .List(lIndex) ElsSEO靠我e .ToolTipText = ""

End With

End If

End Sub

2、向列表中加入横向滚动条使得可以浏览长列表项

当向列表中加入的列表项超出了列表的显示范围后,列表并不会出现横向滚动条让你SEO靠我可以通过滚动来浏览

项目的全部内容。利用 LB_SETHORIZONTALEXTENT 消息可以设置列表框的横向滚动条以及滚动长度。

在 Form1 中加入一个 ListBox 控件,运行程序,可以看到列SEO靠我表中出现了横向滚动条,而且滚动范围正好

是列表项的长度。代码如下(我已试验成功):

Option Explicit

Private Type RECT

Left As Long

Top As Long

RightSEO靠我 As Long

Bottom As Long

End Type

Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVaSEO靠我l hdc As Long, _

ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) SEO靠我As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _SEO靠我

ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Const LB_SETHORIZONTALEXTENT = &H194SEO靠我

Const DT_CALCRECT = &H400

Public Function ListTextWidth(ByRef lstThis As ListBox) As Long 获取最长项目的象素长度SEO靠我

Dim i As Long

Dim tR As RECT

Dim lW As Long

Dim lWidth As Long

Dim lHDC As Long

With lstThis.Parent.FontSEO靠我

.Name = lstThis.Font.Name

.Size = lstThis.Font.Size

.Bold = lstThis.Font.Bold

.Italic = lstThis.Font.ItSEO靠我alic

End With

lHDC = lstThis.Parent.hdc

For i = 0 To lstThis.ListCount - 1 遍历所有的列表项以找到最长的项

DrawText lHDCSEO靠我, lstThis.List(i), -1, tR, DT_CALCRECT

lW = tR.Right - tR.Left + 8

If lW > lWidth Then lWidth = lW

NextSEO靠我

ListTextWidth = lWidth 返回最长列表项的长度(像素)

End Function

Private Sub Form_Load()

Dim astr As String

Dim i

Dim lSEO靠我 As Long

For i = 1 To 10: astr = Str(i) + "这是真正的长项目" + astr: List1.AddItem astr: Next 加入一个很大的列表项

L = LSEO靠我istTextWidth(List1)

SendMessage List1.hwnd, LB_SETHORIZONTALEXTENT, L, 0

End Sub

3、使列表框可以响应用户击键

有时我们需要列表SEO靠我根据用户的敲入字符串自动调整列表的ListIndex到最接近的列表项,就象VB中动态

响应用户输入控件属性的编辑器一样。问题的关键是如何在列表中查找含有指定字符串的列表项,使用

LB_FINDSTRINGSEO靠我消息可以在列表中查找指定字符串。

  在 Form1 中加入一个 TextBox 控件和一个 ListBox 控件,并将 List1的 Sorted 属性设置为True。

运行程序,在文本框中敲入字符,例如"SEO靠我av" "gm",列表就会高亮显示相近的列表项。代码如下(已成功):

Const LB_FINDSTRING = &H18F

Dim st As String

Private Sub Form_Load()SEO靠我

For i = 65 To 90: For j = 65 To 90: List1.AddItem Chr(i) + Chr(j): Next: Next 向List中加入列表项

End Sub

PrivSEO靠我ate Sub Text1_KeyPress(KeyAscii As Integer)

If Len(st) > 1 Then st = ""

If ((KeyAscii > 64 And KeyAsciSEO靠我i < 91) Or (KeyAscii > 96 Or KeyAscii < 123)) Then

Dim L As Long

st = st + Chr(KeyAscii)

L = SendMessagSEO靠我e(List1.hwnd, LB_FINDSTRING, -1, ByVal st)注意!当参数4传入的是字符串时,必须用ByVal传递

If L Then List1.ListIndex = L

EndSEO靠我 If

End Sub

4.在列表框中查找匹配的项目

在Win95风格的帮助系统中一般都有一个“索引”页,索引页含有一个文本框和一个列表框,当用户

在文本框中输入文字时,下拉列表会动态地显示与文本框中文字最匹SEO靠我配的项目,为用户提供了最大的方

便。这种效果在应用程序的帮助系统中很容易实现(只要按照 Win95帮助系统的正常制作过程制作就可

以实现),如果想在应用程序的其它地方实现这种特性就需费一番心思了。

而使用SSEO靠我endMessage函数实现上述特性则非常简单,甚至只需一条语句就足够了,那就是在文本框的

Change事件中给列表框发一条LB_FINDSTRING(&H18F)消息,该消息告诉列表框在列表中查找匹配SEO靠我的项

目。

在发LB_FINDSTRING消息时,wParam参数代表从列表框的哪一个项目后面开始查找,一般情况下该参

数可定为-1,表示从List1(0)即第一项开始向后循环查找,lParam则传进欲搜索SEO靠我的字符串(必须采用值

传递)。

具体的代码和运行画面与下面的 5. 合并在一起演示。

5.为ListBox添加水平滚动条

在VB中,列表框控件仅提供垂直滚动条,没有设置水平滚动条的能力,当某些项目的文本宽度较SEO靠我

时,超出列表框宽度部分的文本就无法显示出来,因此,很有必要为ListBox添加一个水平滚动条来方

便操作。

为添加水平滚动条,只需发一条 LB_SETHORIZONTALEXTENT(&H194) 消息SEO靠我给列表框即可。发送消息

时,wParam为滚动条的长度(以像素为单位,可通过计算得出准确的长度,上面例2 就是如此的,也可

随便给一个数字,如本例的 250),lParam无用。代码如下(已试验成功):

DSEO靠我eclare Function SendMessage Lib "user32" Alias "SendMessageA"(ByVal hwnd As Long, _

ByVal wMsg As LonSEO靠我g,ByVal wParam As Long,lParam As Any) As Long

Public Const LB_FINDSTRING=&H18F

Public Const LB_SETHORISEO靠我ZONTALEXTENT=&H194

Private Sub Form_Load()

List1.AddItem "软件"

List1.AddItem "电脑游戏"

List1.AddItem "电视机"

LiSEO靠我st1.AddItem "电视台"

List1.AddItem "电脑"

List1.AddItem "电脑游戏软件"

SendMessage List1.hwnd,&H194,250,0 为列表框添加水平SEO靠我滚动条

End Sub

Private Sub Text1_Change()

注意!当lParam传入的是字符串时,必须用ByVal传递

List1.ListIndex = SendMessage(List1SEO靠我.hwnd,LB_FINDSTRING,-1,ByVal Text1.Text)

End Sub

6.在API文本浏览器里,当我们在搜索栏输入任意字母,“可用项”里以该字母开头的项目以高亮显

示以引起我们注SEO靠我意该项是不是我们所需的。象这样的功能一切提供搜索选项的程序都应该具备。以下例

子采用SendMessage函数实现这一技术。

Const LB_FINDSTRING = &H18F

Private Sub SEO靠我Form_Load()

Dim i As Integer

For i = Asc("A") To Asc("Z") 给列表框添加26个字母(大写)

List1.AddItem Chr$(i)

Next

TextSEO靠我1 = "" 令文本框为空

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)

Text1 = "" 按下任意键则令原内容消失

Text1.SelLSEO靠我ength = 1 限制长度

Text1.SelText = Chr(KeyAscii) 显示键盘符号

KeyAscii = 0 禁止响应

ListBox中的项目文本若与文本框的一致则选中(高亮)

List1SEO靠我.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Text1.Text))经试,不需CStr函数

End Sub

以上程SEO靠我序适用于单项目为多个字母的查询,但必须注意,在TextBox的KeyPress事件中要作相应的

改动

SendMessage函数应用(二) 

介绍如何利用消息函数来扩展树型列表 TreeView 控件的功能。SEO靠我相信对于树型列表控件大家十分的

熟悉,典型的应用就是 Windows 资源管理器中的目录列表。而在VB中,树型列表控件包含在Microsoft

Windows Common Control 6.0(也可能SEO靠我是5.0,视你的VB或者系统版本而定)中。在Windows API 中,

有一系列的以 TVM_ 开头的消息值,这些消息就是扩展树型列表控件所特定的消息值,下面向大家介绍

其中的一些应用

1、设置树型列表控SEO靠我件的背景颜色

 首先做如下的定义:

Const TV_FIRST = &H1100

Const TVM_SETBKCOLOR = TV_FIRST + 29(4381)

  调用:

Call SendMessage(SEO靠我TreeView1.hwnd, 4381, 0,ByVal RGB(255, 0, 0))

  上面的SendMessage调用将TreeView1的背景颜色设置为红色。

大家可能注意到了。在上面的 SendSEO靠我message 函数定义中,我们将 lParam 定义为 ByVal lParam

As Long,而不是象前面的那些范例那样定义为 Any 或者 String 类型,关于这个问题,我会在最后的

一章中做SEO靠我介绍。

2、设置树型列表控件标题行高度

  TVM_SETITEMHEIGHT 消息设定控件的标题行的高度,该消息的定义及调用方法如下:

Const TV_FIRST = &H1100

Const TVM_SETSEO靠我ITEMHEIGHT = TV_FIRST + 27

Call SendMessage(TreeView1.hwnd, TVM_SETITEMHEIGHT, 60, 0) 将TreeView1标题行高度SEO靠我设置到60像素高

3、为树型列表控件中不同的标题行设置不同的提示

  介绍如何为树型列表控件中的每一个标题设置不同的提示。同 ListBox控件不通,树型列表控件中

并没有根据光标位置获得标题行索引的消息,我们SEO靠我需要另外想办法。在TVM类消息中有一个TVM_HITTEST

消息,发送该消息可以检测控件表面上的某一点,如果该点位于一个标题上,则返回该标题的句柄。而

利用 TVM_GETITEM消息,则可以根据标题句SEO靠我柄返回该标题行的文本。所以结合利用这两个消息可以获取

光标所在标题行的标题文本。具体的范例代码如下:

Option Explicit

Private Type TPoint

 x As Long

y As LonSEO靠我g

End Type

Private Type TVHITTESTINFO

 pt As TPoint

 flags As Long

 hItem As Long

End Type

Private Type TVITEMSEO靠我

 mask As Long

 HTreeItem As Long

 state As Long

 stateMask As Long

 pszText As Long

 cchTextMax As Long

iImage ASEO靠我s Long

 iSelectedImage As Long

 cChildren As Long

 lParam As Long

End Type

Const TV_FIRST = &H1100

Const TVM_SEO靠我HITTEST = TV_FIRST + 17

Const TVM_GETITEM = TV_FIRST + 12

Const TVHT_ONITEMLABEL = &H4

Const TVIF_TEXT SEO靠我= &H1

Const GMEM_FIXED = &H0

Private Declare Function SendMessageRef Lib "user32" Alias "SendMessageA"SEO靠我 (ByVal hwnd As _

Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private DeclaSEO靠我re Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As _

String, ByVal Source ASEO靠我s Long, ByVal Length As Long)

Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As LoSEO靠我ng, ByVal dwBytes _

As Long) As Long

Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem AsSEO靠我 Long) As Long

Dim hItemPrv As Long

Private Sub Form_Load()

Dim ndX As Node

   加入若干Item

Set ndX = TreeView1.SEO靠我Nodes.Add(, , "R", "Root")

   Set ndX = TreeView1.Nodes.Add("R", tvwChild, "Key1", "Node1")

Set ndX = TreSEO靠我eView1.Nodes.Add("Key1", tvwChild, "SubKey1", "SubNode1")

Set ndX = TreeView1.Nodes.Add("SubKey1", tvSEO靠我wChild, "SubKeys1", "SubNode1")

Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey2", "SubNode2"SEO靠我)

   Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey3", "SubNode3")

Set ndX = TreeView1.Nodes.AddSEO靠我("Key1", tvwChild, "SubKey4", "SubNode4")

End Sub

Private Sub TreeView1_MouseMove(Button As Integer, SSEO靠我hift As Integer, x As Single, y As Single)

   Dim ptA As TPoint

   Dim tf As TVHITTESTINFO

   Dim tv As TVITEM

DiSEO靠我m hStr As Long

   Dim hItem As Long

   Dim astr As String * 1024

   Dim bstr

   On Error GoTo errLab

   获得当前光标所在的位置坐标

ptASEO靠我.x = Int(x / Screen.TwipsPerPixelX)

   ptA.y = Int(y / Screen.TwipsPerPixelY)

   tf.pt = ptA

tf.flags = TVHT_SEO靠我ONITEMLABEL

   获得光标所在的Item的句柄

   hItem = SendMessageRef(TreeView1.hwnd, TVM_HITTEST, 0, tf)

如果未获得句柄或者同上一次是同一个SEO靠我Item的句柄则退出

   If ((hItem <= 0) Or (hItem = hItemPrv)) Then Exit Sub

   hItemPrv = hItem

   分配一定的内存空间用以存储Item的标题

hSEO靠我Str = GlobalAlloc(GMEM_FIXED, 1024)

   If hStr > 0 Then

    tv.mask = TVIF_TEXT 获取标题文本

tv.HTreeItem = hItem ItSEO靠我em句柄

    tv.pszText = hStr

    tv.cchTextMax = 1023

    发送TVM_GETITEM获得标题文本

Call SendMessageRef(TreeView1.hwnd, TVM_SEO靠我GETITEM, 0, tv)

    将标题文本拷贝到字符串astr中

    CopyMemory astr, hStr, 1024

bstr = Left$(astr, (InStr(astr, Chr(0)) - SEO靠我1))

    TreeView1.ToolTipText = bstr

    释放分配的内存空间

    GlobalFree hStr

   End If

   Exit Sub

  errLab:

   Resume Next

  End Sub

运行上面的程SEO靠我序,当光标在 TreeView1上面移动时,TreeView1的 ToolTips就会根据光标所在的不

同标题行而变动。

SendMessage函数应用(三) 

介绍关于RichTextBox(简称RTF)控SEO靠我件的消息和ListView控件的消息控制。

1.在Windows消息中,以EM_开头的消息是专门控制TextBox类控件和RTF类控件的。下面介绍的是如何利

用 EM_ 消息实现向 RichTextBoxSEO靠我 中粘贴文本和位图。在 EM_消息中,有一个 EM_PASTESPECIAL 消息

可以从剪贴板中获取文本或者位图类数据并拷贝到 RTF 上。

运行程序,点击Command1,可以将剪贴板中的数据(位图或SEO靠我者文本)拷贝到RichTextBox1上。

  在 EM_PASTESPECIAL 消息中,wParam 定义剪贴板数据类型,lParam 定义一个 repastespecial

类型的数据,其中的 dwAsSEO靠我pect 说明数据以何种方式显示到 RTF 对象上,如果是 DVASPECT_CONTENT,

则将整个数据显示在 RTF 上,如果是 DVASPECT_ICON ,则只在 RTF 上显示一个图标。

经试SEO靠我,repastespecial 格式没有作用,因此参数4设为0即可。

Private Type repastespecial

dwAspect As Long 显示方式

dwParam As Long

EndSEO靠我 Type

Const WM_USER = &H400

Const EM_PASTESPECIAL = 1088

Const CF_BITMAP = 2

Const CF_TEXT = 1

Const DVASSEO靠我PECT_CONTENT = 1

Const DVASPECT_ICON = 4

Private Sub Command1_Click()

Dim re As repastespecial

re.dwAspeSEO靠我ct = DVASPECT_CONTENT

If Clipboard.GetFormat(vbCFText) Then 剪贴板中为文本信息

Call SendMessage(RichTextBox1.hwSEO靠我nd, EM_PASTESPECIAL, CF_TEXT, re)

ElseIf Clipboard.GetFormat(vbCFBitmap) Then 剪贴板中为位图信息

Call SendMessaSEO靠我ge(RichTextBox1.hwnd, EM_PASTESPECIAL, CF_BITMAP, re)

End If

End Sub 

2.ListView控件也是Windows界面开发中重要的控件,典型SEO靠我的应用就是Windows资源管理器中的文件列

表。而在VB中,ListView控件包含在Microsoft Windows Common Control 6.0(也可能是5.0,视你的

VB或者系统版本而SEO靠我定)中。在 Windows API 中,有一系列的以 LVM_开头的消息值,这些消息就是扩展

ListView控件所特定的消息值,下面的范例介绍如何通过LVM_消息设置ListView控件中图标的间距。SEO靠我

例如下:

Private Type RECT

 Left As Long

 Top As Long

 Right As Long

 Bottom As Long

End Type

Const LVM_FIRST = &HSEO靠我1000

Const LVM_SETWORKAREA = LVM_FIRST + 65

Const LVM_SETICONSPACING = LVM_FIRST + 53

Private Sub Form_SEO靠我Load()

Dim xn As ListItem

Me.Show

ListView1.Width = 4500

ListView1.Height = 3000

ListView1.Refresh

Set xn SEO靠我= ListView1.ListItems.Add

xn.Text = "List1"

Set xn = ListView1.ListItems.Add

xn.Text = "List2"

Set xn = SEO靠我ListView1.ListItems.Add

xn.Text = "List3"

Set xn = ListView1.ListItems.Add

xn.Text = "List4"

Set xn = LiSEO靠我stView1.ListItems.Add

xn.Text = "List5"

Set xn = ListView1.ListItems.Add

xn.Text = "List6"

ListView1.RefSEO靠我resh

Call SendMessage(ListView1.hwnd, LVM_SETICONSPACING, 0, ByVal (60 * 65536 + 190&))

End Sub

要运行上面的程SEO靠我序,首先要确保ListView1的Arrange属性为1,View属性为0。在上面的程序中,我

们利用了 VM_SETICONSPACING 消息来控制图标间距。其中SendMessage中的参数lPaSEO靠我ram定义图标间距,

高位为纵向间距,低位为横向间距,在上面的范例中,我们将图标的纵向间距定义为60像素,横向间距

定义为190像素。

    

SendMessage函数的应用(四) 

1,获得光标位置和字符个数.

CpSEO靠我os=SendMessage(text1.hwnd,187,-1,0) 光标所在行的首字符在文本中的位置

Lpos=SendMessage(text1.hwnd,201,Cpos,0) 光标所在的行号

LSEO靠我ine=SendMessage(text1.hwnd,193,Cpos,0) 这行的字符数.

2.获取第N行的文本

Dim ST As String

ST = Space(110)必须要事先赋空格

Line=SEO靠我SendMessage(text1.hwnd,196, N-1, ByVal ST ST返回获取到的文本,Line返回文本的长度字节数

下面的未成功

Dim str(256) As Byte, K As SEO靠我Integer

str(1)=1 最大允许存放256个字符

K = SendMessage (Text1.hwnd,196,2,str(0)) 获取第3行的数据放在str中

text1.text = StrSEO靠我Conv(str,vbUnicode) 转换为字符串后显示

  说明:在调用SendMessage获取第N行字符串时,lParam需要说明为字节数组,在调用完成后,再将

字节数组转换为字符串;另外,调用前必须SEO靠我在lParam的前两个字节指明允许存放的最大长度,其中第一

个字节为低位,第二个字节为高位,本例将高位(即str(1))置1.说明最大允许存放256个字符。

3.开关显示器.

SendMessage HanSEO靠我dle, WM_SYSCOMMAND, SC_MONITORPOWER, 0 关闭显示器.

SendMessage Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1 SEO靠我打开显示器

4.程序控制拉下或收起组合框的下拉列表

一般情况下,为了拉下或收起组合框的下拉列表,需要用键盘或鼠标进行操作,而有时我们希望程

序运行的某个时刻自动拉出下拉列表(比如在一些演示程序中),为了实现SEO靠我这个目的,我们也只有借助

于SendMessage函数,方法是发一个CB_SHOWDROPDOWN(&H14F)消息给组合框。

在发CB_SHOWDROPDOWN消息时,wParam参数决定了是拉下列表(SEO靠我=True)还是收起表(=False),

lParam无用(设为0)。

为说明具体的使用方法,下面提供简单的程序片段:

Const CB_SHOWDROPDOWN=&H14F

当程序中某处需要拉下组合框ComSEO靠我bol的列表时,调用如下语句:

SendMessage Combol.hwnd,CB_SHOWDROPDOWN,True,0

当需要收起组合框Combol的列表时,调用如下语句:

SendMessage CSEO靠我ombol.hwnd,CB_SHOWDROPDOWNN,False,0

5. 返回控件中显示的第一行的行号。

LineNo = SendMessageBynum(CTextBox.hwnd, EM_GETSEO靠我FIRSTVISIBLELINE, 0, 0)

6.下面的函数能够滚动控件,不过在滚动之前最好判断控件的文本行数和能够显示的行数,以免滚动时

发生混乱。函数SendMessageBynum是SendMesSEO靠我sage函数的安全声明函数,其定义与SendMessage函数完全

相同,只是函数名不同。

Function ScrollTextBox(CTextBox As TextBox, nVal As LongSEO靠我, Optional nVertical As _

Boolean = True) As Long 

If nVertical Then 

ScrollTextBox = SendMessageBynum(CTSEO靠我extBox.hwnd, EM_LINESCROLL, 0, nVal)

Else 

ScrollTextBox = SendMessageBynum(CTextBox.hwnd, EM_LINESCROLSEO靠我L, nVal, 0)

End If 

End Function

7.下面的函数将返回控件能显示的行数:(经试,总是引起程序崩溃)

获取当前字体的矩形区域(即字体的高度与平均宽度等信息)

Private DeclSEO靠我are Function GetTextMetrics Lib "gdi32" Alias "GetTextMetricsA" (ByVal hdc As Long, lpMetrics As TEXSEO靠我TMETRIC) As Long

Private Type TEXTMETRIC

tmHeight As Long 字符高度

tmAscent As Long 字符上部高度(基线以上)

tmDescent ASEO靠我s Long 字符下部高度(基线以下)

tmInternalLeading As Long 由tmHeight定义的字符高度的顶部空间数目

tmExternalLeading As Long 加在两行之间SEO靠我的空间数目

tmAveCharWidth As Long 平均字符宽度

tmMaxCharWidth As Long 最宽字符的宽度

tmWeight As Long 字体的粗细轻重程度

tmOverhangSEO靠我 As Long 加入某些拼接字体上的附加高度

tmDigitizedAspectX As Long 字体设计所针对的设备水平方向

tmDigitizedAspectY As Long 字体设计所针对的设SEO靠我备垂直方向

tmFirstChar As String 为字体定义的第一个字符

tmLastChar As String 为字体定义的最后一个字符

tmDefaultChar As String 字体中所没SEO靠我有字符的替代字符

tmBreakChar As String 用于拆字的字符

tmItalic As Byte 字体为斜体时非零

tmUnderlined As Byte 字体为下划线时非零

tmStruckSEO靠我Out As Byte 字体被删去时非零

tmPitchAndFamily As Byte 字体间距(低4位)和族(高4位)

tmCharSet As Byte 字体的字符集

End Type

Type RESEO靠我CT

Left As Long

Top As Long

Right As Long

bottom As Long

End Type

Public ST As String

Function GetVisibleLiSEO靠我nes(CTextBox As TextBox) As Long

Dim rc As RECT 以象素为单位

Dim tm As TEXTMETRIC

Dim hDC&, lfont&, oldfont& 

DSEO靠我im di&, lc&

lc = SendMessage(CTextBox.hwnd, EM_GETRECT, 0, rc) 

lfont = SendMessage(CTextBox.hwnd, WM_GSEO靠我ETFONT, 0, 0)

hDC = GetDC(CTextBox.hwnd) 

If lfont <> 0 Then oldfont = SelectObject(hDC, lfont) 

di = GetSEO靠我TextMetrics(hDC, tm)

If lfont <> 0 Then lfont = SelectObject(hDC, oldfont) 

GetVisibleLines = (rc.bottoSEO靠我m - rc.top) / tm.tmHeight

di = ReleaseDC(CTextBox.hwnd, hDC) 

End Function

8.设置控件的左边距。

Public Const EM_SESEO靠我TMARGINS& = &HD3

Public Const EC_LEFTMARGIN& = &H1

Function SetMargins(CTextBox As TextBox, nVal As LoSEO靠我ng) As Long

SetMargins = SendMessageBynum(CTextBox.hwnd, EM_SETMARGINS, EC_LEFTMARGIN, nVal) 

End FunctSEO靠我ion

9.利用SendMessage函数还可以实现一些有趣的效果:

  例如在按钮的Click事件中加入如下语句:

SendMessage(Command1.hWnd,BM_SETSTYLE,BS_RADIOSEO靠我BUTTON,1)BM_SETSTYLE = &HF4,BS_RADIOBUTTON = &H4

  运行后点击按钮,就可以把按钮变成一个收音机按钮(经试,变成一个圆孔,有点象单选按纽)。

如要得到圆形或椭圆SEO靠我形按纽可使用另外2个API函数:

hdc=CreateEllipticRgn(3, 3, 25, 25) 试验成功,这两个函数也用于创建圆形窗体

SetWindowRgn Command1.hWnd, hSEO靠我dc, True

DeleteObject hdc

10.窗体操作

Public Const WM_SYSCOMMAND = &H112

Public Const SC_CLOSE = &HF060 关闭窗体SEO靠我

Public Const SC_MINIMIZE = &HF020 最小化窗体

Public Const SC_MAXIMIZE = &HF030 最大化窗体

Public Const SC_RESTORSEO靠我E = &HF120 恢复窗体大小

Public Const WM_SETTEXT = &HC 设置窗体的Caption

Public Const WM_GETTEXT = &HD 取得窗体的captioSEO靠我n

Private Sub Command_Click(Index As Integer)

Dim S As String

S = String(80, Chr(0)) 

Select Case Index

CaSEO靠我se 0: SendMessage Me.hwnd, WM_GETTEXT, Len(S), ByVal S: Text1 = Left(S, InStr(S, Chr(0)) - 1) 读出窗体的CSEO靠我aption

Case 1: SendMessage Me.hwnd, WM_SETTEXT, 0, ByVal CStr(Text1.Text)设置窗体的Caption,由于Text1.text属于VSEO靠我ariant类型,所以一定先要用CStr把它转换成字符串

 Case 2: SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, ByVal 0&窗体最大化

CaSEO靠我se 3: SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MINIMIZE, ByVal 0&窗体最小化

Case 4: SendMessage Me.hwnd, WM_SEO靠我SYSCOMMAND, SC_RESTORE, ByVal 0&窗体恢复原来的大小

Case 5: SendMessage Me.hwnd, WM_SYSCOMMAND, SC_CLOSE, ByValSEO靠我 0&关闭窗体

End Select

End Sub

11.文本垂直居中:

  实现这个效果首先TextBox的MultiLine属性必须为True(多行文本,其实这个属性关系创建TextBox内部

使用哪个类,因SEO靠我此一旦创建就不能修改这个属性,所以不能在代码中修改这个属性)

Public Sub VerMiddleText(mText As TextBox)

Dim rc As RECT 以象素为单位

Dim tmpSEO靠我Top As Long

Dim tmpBot As Long

If mText.MultiLine = False Then Exit Sub

Call SendMessage(mText.hwnd, EMSEO靠我_GETRECT, 0, rc)获得窗口区域的边界

进行位置数据计算

With Me.Font

.Name = mText.Font.Name

.Size = mText.Font.Size

.Bold = mSEO靠我Text.Font.Bold

End With

tmpTop = ((rc.Bottom - rc.Top) - (mText.Parent.TextHeight("H") \ Screen.TwipsPSEO靠我erPixelY)) \ 2

tmpBot = ((rc.Bottom - rc.Top) + (mText.Parent.TextHeight("H") \ Screen.TwipsPerPixelYSEO靠我)) \ 2

rc.Top = tmpTop

rc.Bottom = tmpBot

mText.Alignment = vbCenter

数据计算完毕,再发送EM_SETRECTNP消息(为一个编辑控件设置格SEO靠我式化矩形,与EM_SETRECT类似,只是控件此时不会重画)

Call SendMessage(mText.hwnd, EM_SETRECTNP, 0&, rc)

mText.Refresh

End SubSEO靠我

12.调整边距:

  如果你查看TextBox中常用的消息,你会发现有这样一对消息:EM_GETMARGINS 和 EM_SETMARGINS,MSDN的解

释是:获取和设置编辑控件的左、右边距(不得用于NTSEO靠我3.51)。具体是左还是右由该消息的参数决定。

  这样做有什么意义呢?有的时候如果你想在texebox中放入其他对象,而又不希望文本被覆盖掉,你就需要用

到这个方法。

Private Sub SetMargiSEO靠我n(nLeft As Integer, nRight As Integer, lhWnd As Long)

Dim lLongValue As Long

lLongValue = nRight * &H1SEO靠我0000 + nLeft 高四位表示右边距,低四位为左边距

SendMessage lhWnd, EM_SETMARGINS, EC_LEFTMARGIN Or EC_RIGHTMARGIN, lLonSEO靠我gValue

End Sub

SendMessage函数应用(五)

  RichEdit控件的正文操作

一、正文搜索

RichEdit 控件具有几种正文操作,搜索指定正文就是其中的一种。搜索正文是通过发送

EM_FISEO靠我NDTEXT 或者 EM_FINDTEXTEX 消息来完成的。这两个消息有一点很小的不同点。

1.EM_FINDTEXT

wParam=搜索选项,可以是下面3个参数的任意组合值(这些选项对 EM_FINDSEO靠我TEXT 和 EM_FINDTEXTEX

都是一样的):

①FR_DOWN(&H1):搜索方向。如果指定了这个标志值,搜索操作从当前选定的 end 位置开始,直到控件

中正文的 end 位置结束(向下搜索)SEO靠我。这个标志影响 RichEdit 2.0 和以后版本,是 RichEdit 1.0

  的缺省行为。RichEdit 2.0或以后版本的缺省行为是:在当前选定正文内的从结尾搜索到开始位置

(向前搜索)。概括来SEO靠我说就是,如果你使用 RichEdit 1.0, 无论你做什么都没法影响搜索的方向,它

  总使用向后搜索。但是如果你使用 RichEdit 2.0 而且你想使用向后搜索的话,你必须指定这个标

志值,否则使用的SEO靠我是向前搜索了。

②FR_MATCHCASE(&H4):区分大小写。

③FR_WHOLEWORD(&H2):匹配指定搜索串的整个词。

 lParam = FINDTEXT 结构的指针。

Type FINDTEXTSEO靠我 STRUCT

chrg As CHARRANGE

lpstrText As Long

End Type

chrg 是一个 CHARRANGE 结构,其定义如下:

Type CHARRANGE STRUCT

cpSEO靠我Min As Long 包含字符数组中第一个字符的字符索引

cpMax As Long 包含紧跟在字符数组中最后一个字符的字符的字符索引

End Type

基本上,要搜索一个正文串,你必须指定要搜索的字符范SEO靠我围。cpMin 和 cpMax 的具体意义根据搜索是向

后还是向前是不同的。

  如果是向后搜索,cpMin 指定搜索的开始字符索引,而 cpMax 则是结束字符索引。

如果是向前搜索,则反过来才对,也就是说 SEO靠我cpMin 包含结束字符索引而cpMax 包含开始字符索引。

lpstrText 是要搜索的正文串的指针。

2.EM_FINDTEXTEX

返回控件中跟搜索串匹配的的正文串的一个字符的索引。如果没找到匹配的SEO靠我则返回 -1。

wParam = 搜索选项,跟 EM_FINDTEXT 的一样。

lParam = FINDTEXTEX 结构的指针。

Type FINDTEXTEX STRUCT

chrg As CHARRSEO靠我ANGE

lpstrText As Long 

chrgText CHARRANGE CHARRANGE

End Type

FINDTEXTEX 中开始的两个成员是跟 FINDTEXT 结构中的一样的。

chrgSEO靠我Text 是一个 CHARRANGE 结构,如果搜索到匹配串的话,其开始/结束字符索引会被填入这个结构中。

EM_FINDTEXTEX 的返回值跟 EM_FINDTEXT的是一样的。

EM_FINDTEXSEO靠我T 跟 EM_FINDTEXTEX 的不同处:

FINDTEXTEX 结构有一个另外的chrgText成员, 如果搜索到匹配串的话,其开始/结束字符索引会被填入这个成

员中。如果我们想对这个正文串进行更多SEO靠我的正文操作的话,有这个就方便多了。

二、替换/插入正文

RichEdit 控件提供了 EM_SETTEXTEX 来进行正文替换/插入操作。这个消息混合了 WM_SETTEXT 和

EM_REPLACESELSEO靠我 的功能. 它具有以下语法:

wParam = SETTEXTEX 结构的指针。

Type SETTEXTEX STRUCT

flags As Long 

codepage As Long

End Type

flaSEO靠我gs 可以是以下值的组合:

ST_DEFAULT 删除Undo堆栈,丢弃RTF格式,替换所有的正文。

ST_KEEPUNDO 保留Undo堆栈。

ST_SELECTION 替换选定正文并且保留RTF格式

coSEO靠我depage 是一个常量,指定你的正文想要的代码页。我们通常简单的使用 CP_ACP。

三、正文选择

我们可以使用消息 EM_SETSEL 或者 EM_EXSETSEL 来编程选择正文.其中任意的一个都可SEO靠我以工作的很好。

要使用哪一个消息要根据可用的字符索引格式来选择。如果它们保存在一个 CHARRANGE 结构中,则使用

EM_EXSETSEL更容易实现。

EM_EXSETSEL

wParam = 没有使用,SEO靠我必须为 0 。

lParam = CHARRANGE 结构的指针,包含想要选定的正文字符范围。

四、事件通知

在使用多行Edit控件时,你必须子类化它以便得到输入信息象鼠标/键盘事件等。RichEdit 控SEO靠我件提供了一

个更好的方案,它可以把这些消息通知父窗口。为了注册得到通知消息,父窗口发送 EM_SETEVENTMASK 消息

给 RichEdit 控件,指定它对哪些消息感兴趣。 

EM_SETEVENTMASEO靠我SK 具有以下的语法:

wParam 没有使用,必须为 0 。

lParam = 事件掩码值,可以是以下标志值的任意组合:

ENM_CHANGE 发送 EN_CHANGE 通知

ENM_CORRECTTEXTSEO靠我 发送 EN_CORRECTTEXT 通知

ENM_DRAGDROPDONE 发送 EN_DRAGDROPDONE 通知

ENM_DROPFILES 发送 EN_DROPFILES 通知

ENM_KEYEVSEO靠我ENTS 为键盘消息发送 EN_MSGFILTER 通知

ENM_LINK Rich Edit 2.0 或以后版本: 当鼠标在具有 CFE_LINK 风格的正文上面移过,而且执行了一个

或几个鼠标动作时,SEO靠我就发送 EN_LINK 通知。

ENM_MOUSEEVENTS 为鼠标消息发送 EN_MSGFILTER 通知。

ENM_OBJECTPOSITIONS 发送 EN_OBJECTPOSITIONS 通知

ESEO靠我NM_PROTECTED 发送 EN_PROTECTED 通知

ENM_REQUESTRESIZE 发送 EN_REQUESTRESIZE 通知

ENM_SCROLL 发送 EN_HSCROLL 和 ENSEO靠我_VSCROLL 通知

ENM_SCROLLEVENTS 为鼠标滑轮发送 EN_MSGFILTER 通知。

ENM_SELCHANGE 发送 EN_SELCHANGE 通知

ENM_UPDATE 发送 ENSEO靠我_UPDATE 通知

Rich Edit 2.0 和以后版本: 这个标志值会被忽略,而经常发送 EN_UPDATE 通知。然而如果 RichEdit 

3.0 模拟 RichEdit 1.0的话,你必须使用SEO靠我这个标志值来发送 EN_UPDATE 通知

上面的所有通知都被做为 WM_NOTIFY 消息来发送:你必须检查 NMHDR 结构的 code 成员来得到通知消

息。譬如,如果你想注册得到鼠标消息(也就是说SEO靠我,你想提供一给上下文相关的弹出菜单)

==================================================================================SEO靠我========

首先我们了解一下Windows的消息机制。Windows是一个消息驱动式系统,Windows消息提供应用程序与应用程序之间,应用程序与Windows系统之间进行通信的手段。举个例子,打SEO靠我开记事本程序,该程序有一个 “文件“菜单。那么,在运行该程序的时候,如果用户单击“文件菜单“里的“新建“命令,这个动作将被Windows所捕捉,Windows经过分析得知这个动作应该由我们打开的记事本SEO靠我程序所来处理,然后Windows就发送个消息。譬如我们编程的时候有时用到的WM_COMMAND的消息给记事本,然后记事本就把这个消息处理掉,这个过程就是消息处理。

别名:

SendMessageA

说明:

SEO靠我用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。

SendMessage 的完全形式:

Declare Function SendMessage Lib "user32SEO靠我" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)SEO靠我 As Long

SendMessage所包含4个参数:

Hwnd 32位的窗口句柄窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄。 

wMsg 用于区别其他消息的常量值,这些常量可SEO靠我以是Windows单元中预定义的常量,也可以是自定义的常量。

wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。 

lParam 通常是一个指向内存中数据的指针。由于WParm、lParSEO靠我am和Pointer都是32位的,因此,它们之间可以相互转换。

wMsg函数:

WM_CREATE 创建一个窗口 

WM_DESTROY 当一个窗口被破坏时发送 

WM_MOVE 移动一个窗口 

WM_SIZE 改变SEO靠我一个窗口的大小

WM_ACTIVATE 一个窗口被激活或失去激活状态 

WM_SETFOCUS 一个窗口获得焦点 

WM_KILLFOCUS 一个窗口失去焦点 

WM_ENABLE 一个窗口改变成Enable状态 

WSEO靠我M_SETREDRAW 设置窗口是否能重画

WM_SETTEXT 应用程序发送此消息来设置一个窗口的文本 

WM_GETTEXT 应用程序发送此消息来复制对应窗口的文本到缓冲区 

WM_GETTEXTLENGTSEO靠我H 得到与一个窗口有关的文本的长度(不包含空字符)

WM_PAINT 要求一个窗口重画自己 

WM_CLOSE 当一个窗口或应用程序要关闭时发送一个信号 

WM_QUERYENDSESSION 当用户选择结束对SEO靠我话框或程序自己调ExitWindows函数

WM_QUIT 用来结束程序运行 

WM_QUERYOPEN 当用户窗口恢复以前的大小位置时,把此消息发送给某个图标 

WM_ERASEBKGND 当窗口背景必须被擦SEO靠我除时(例在窗口改变大小时)

WM_SYSCOLORCHANGE 当系统颜色改变时,发送此消息给所有顶级窗口 

WM_ENDSESSION 当系统进程发出WM_QUERYENDSESSION消息后,此消息发送SEO靠我给应用程序,通知它对话是否结束

WM_SHOWWINDOW 当隐藏或显示窗口是发送此消息给这个窗口 

WM_ACTIVATEAPP 发此消息给应用程序哪个窗口是激活的,哪个是非激活的 

WM_FONTCHANGSEO靠我E 当系统的字体资源库变化时发送此消息给所有顶级窗口

WM_TIMECHANGE 当系统的时间变化时发送此消息给所有顶级窗口 

WM_CANCELMODE 发送此消息来取消某种正在进行的摸态(操作) 

WM_SSEO靠我ETCURSOR 如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口

WM_MOUSEACTIVATE 当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口 

WMSEO靠我_CHILDACTIVATE 发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小

WM_QUEUESYNC 此消息由基于计算机的训练程序发送,通过WH_JOURNALPALSEO靠我YBACK的hook程序分离出用户输入消息

WM_GETMINMAXINFO 此消息发送给窗口当它将要改变大小或位置 

WM_PAINTICON 发送给最小化窗口当它图标将要被重画 

WM_ICONERASEBSEO靠我KGND 此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画

WM_NEXTDLGCTL 发送此消息给一个对话框程序去更改焦点位置 

WM_SPOOLERSTATUS 每当打印管理列队增加或减少SEO靠我一条作业时发出此消息

WM_DRAWITEM 当button,combobox,listbox,menu的可视外观改变时发送 

WM_MEASUREITEM 当button,combobox,listboxSEO靠我,listviewcontrol,ormenuitem被创建时

WM_VKEYTOITEM 此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息 

WMSEO靠我_CHARTOITEM 此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息

WM_SETFONT 当绘制文本时程序发送此消息得到控件要用的颜色 

WMSEO靠我_GETFONT 应用程序发送此消息得到当前控件绘制文本的字体

WM_SETHOTKEY 应用程序发送此消息让一个窗口与一个热键相关连 

WM_GETHOTKEY 应用程序发送此消息来判断热键与某个窗口是否SEO靠我有关联

WM_QUERYDRAGICON 此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标 

WM_COMPARESEO靠我ITEM 发送此消息来判定combobox或listbox新增加的项的相对位置

WM_COMPACTING 显示内存已经很少了 

WM_WINDOWPOSCHANGING 发送此消息给那个窗口的大小和位置将SEO靠我要被改变时,来调用setwindowpos函数或其它窗口管理函数

WM_WINDOWPOSCHANGED 发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函SEO靠我

WM_POWER 当系统将要进入暂停状态时发送此消息 

WM_COPYDATA 当一个应用程序传递数据给另一个应用程序时发送此消息 

WM_CANCELJOURNA 当某个用户取消程序日志激活状态,提交此消SEO靠我息给程序

WM_NOTIFY 当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口 

WM_INPUTLANGCHANGEREQUEST 当用户选择某种输入语言,或输入语言的热键SEO靠我改变

WM_INPUTLANGCHANGE 当平台现场已经被改变后发送此消息给受影响的最顶级窗口 

WM_TCARD 当程序已经初始化windows帮助例程时发送此消息给应用程序 

WM_HELP 此消息显示用SEO靠我户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口

WM_USERCHANGED 当用户已经登入或退出后发送SEO靠我此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息

WM_NOTIFYFORMAT 公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSISEO靠我还是UNICODE结构

WM_CONTEXTMENU 当用户某个窗口中点击了一下右键就发送此消息给这个窗口 

WM_STYLECHANGING 当调用SETWINDOWLONG函数将要改变一个或多个窗口的风SEO靠我格时发送此消息给那个窗口

WM_STYLECHANGED 当调用SETWINDOWLONG函数一个或多个窗口的风格后发送此消息给那个窗口 

WM_DISPLAYCHANGE 当显示器的分辨率改变后发送此消息SEO靠我给所有的窗口

WM_GETICON 此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄 

WM_SETICON 程序发送此消息让一个新的大图标或小图标与某个窗口关联 

WM_NCCREATE 当某SEO靠我个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送

WM_NCDESTROY 此消息通知某个窗口,非客户区正在销毁 

WM_NCCALCSIZE 当某个窗口的客户区域必须被核算时发送此消息 

WM_SEO靠我NCHITTEST 移动鼠标,按住或释放鼠标时发生

WM_NCPAINT 程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时 

WM_NCACTIVATE 此消息发送给某个窗口仅当它的非客户区需要被改变SEO靠我来显示是激活还是非激活状态

WM_GETDLGCODE 发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件通过应 

WM_NCMOUSEMOVE 当光标在一个窗口的非SEO靠我客户区内移动时发送此消息给这个窗口非客户区为:窗体的标题栏及窗的边框体

WM_NCLBUTTONDOWN 当光标在一个窗口的非客户区同按下鼠标左键时提交此消息 

WM_NCLBUTTONUP 当用户释放鼠标SEO靠我左键同时光标某个窗口在非客户区十发送此消息

WM_NCLBUTTONDBLCLK 当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息 

WM_NCRBUTTONDOWN 当用户按下鼠标右键同时光标又在SEO靠我窗口的非客户区时发送此消息

WM_NCRBUTTONUP 当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息 

WM_NCRBUTTONDBLCLK 当用户双击鼠标右键同时光标某个窗口在非客户区十发送SEO靠我此消息

WM_NCMBUTTONDOWN 当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息 

WM_NCMBUTTONUP 当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息 

WM_NCMBUTSEO靠我TONDBLCLK 当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息

WM_KEYFIRST 

WM_KEYDOWN 按下一个键 

WM_KEYUP 释放一个键 

WM_CHAR 按下某键,并已发出WM_KSEO靠我EYDOWN,WM_KEYUP消息

WM_DEADCHAR 当用translatemessage函数翻译WM_KEYUP消息时发送此消息给拥有焦点的窗口 

WM_SYSKEYDOWN 当用户按住ALT键同时SEO靠我按下其它键时提交此消息给拥有焦点的窗口

WM_SYSKEYUP 当用户释放一个键同时ALT键还按着时提交此消息给拥有焦点的窗口 

WM_SYSCHAR 当WM_SYSKEYDOWN消息被TRANSLATEMSEO靠我ESSAGE函数翻译后提交此消息给拥有焦点的窗口

WM_SYSDEADCHAR 当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口 

WM_INITDIASEO靠我LOG 在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务

WM_COMMAND 当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译 

WM_SYSCOSEO靠我MMAND 当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息

WM_TIMER 发生了定时器事件 

WM_HSCROLL 当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那SEO靠我个窗口,也发送给拥有它的控件

WM_VSCROLL 当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件 

WM_INITMENU 当一个菜单将要被激活时发送此消息,它发生在SEO靠我用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单

WM_INITMENUPOPUP 当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部 

WM_MENUSEO靠我SELECT 当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)

WM_MENUCHAR 当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者 

WM_ENTERIDLE 当一SEO靠我个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待

WM_CTLCOLORMSGBOX 在windows绘制SEO靠我消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色

WM_CTLCOLOREDIT 当一个编辑型控件将要被绘制时发送此消SEO靠我息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色

WM_CTLCOLORLISTBOX 当一个列表框控件将要被绘制前发送此消息给它的父窗口通过响SEO靠我应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色

WM_CTLCOLORBTN 当一个按钮控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过SEO靠我使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色

WM_CTLCOLORDLG 当一个对话框控件将要被绘制前发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来SEO靠我设置对话框的文本背景颜色

WM_CTLCOLORSCROLLBAR 当一个滚动条控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜SEO靠我

WM_CTLCOLORSTATIC 当一个静态控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色 

WM_MOUSEFISEO靠我RST

WM_MOUSEMOVE 移动鼠标 

WM_LBUTTONDOWN 按下鼠标左键 

WM_LBUTTONUP 释放鼠标左键 

WM_LBUTTONDBLCLK 双击鼠标左键 

WM_RBUTTONDOWN 按下SEO靠我鼠标右键

WM_RBUTTONUP 释放鼠标右键 

WM_RBUTTONDBLCLK 双击鼠标右键 

WM_MBUTTONDOWN 按下鼠标中键 

WM_MBUTTONUP 释放鼠标中键 

WM_MBUTTONDBLCSEO靠我LK 双击鼠标中键

WM_MOUSEWHEEL 当鼠标轮子转动时发送此消息个当前有焦点的控件 

WM_PARENTNOTIFY 当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息SEO靠我给它的父窗口

WM_ENTERMENULOOP 发送此消息通知应用程序的主窗口that已经进入了菜单循环模式 

WM_EXITMENULOOP 发送此消息通知应用程序的主窗口that已退出了菜单循环模式 

WMSEO靠我_SIZING 当用户正在调整窗口大小时发送此消息给窗口通过此消息应用程序可以监视窗口大小和位置也可以修改他们

WM_CAPTURECHANGED 发送此消息给窗口当它失去捕获的鼠标时 

WM_MOVINGSEO靠我 当用户在移动窗口时发送此消息,通过此消息应用程序可以监视窗口大小和位置也可以修改他们

WM_POWERBROADCAST 此消息发送给应用程序来通知它有关电源管理事件 

WM_DEVICECHANGE 当SEO靠我设备的硬件配置改变时发送此消息给应用程序或设备驱动程序

WM_MDIDESTROY 应用程序发送此消息给多文档的客户窗口来关闭一个MDI子窗口 

WM_MDIACTIVATE 应用程序发送此消息给多文档的客SEO靠我户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)激活它

WM_MDIRESTORE 程序发送此消息给MDI客户窗口让子窗口从最SEO靠我大最小化恢复到原来大小

WM_MDINEXT 程序发送此消息给MDI客户窗口激活下一个或前一个窗口 

WM_MDIMAXIMIZE 程序发送此消息给MDI客户窗口来最大化一个MDI子窗口 

WM_MDITILESEO靠我 程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口

WM_MDICASCADE 程序发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口 

WM_MDIICONARRANGE 程序发SEO靠我送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口

WM_MDIGETACTIVE 程序发送此消息给MDI客户窗口来找到激活的子窗口的句柄 

WM_MDISETMENU 程序发送此消息给MDI客户窗口SEO靠我用MDI菜单代替子窗口的菜单

WM_CUT 程序发送此消息给一个编辑框或combobox来删除当前选择的文本 

WM_COPY 程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板 

WM_SEO靠我PASTE 程序发送此消息给editcontrol或combobox从剪贴板中得到数据

WM_CLEAR 程序发送此消息给editcontrol或combobox清除当前选择的内容 

WM_UNDO 程序发SEO靠我送此消息给editcontrol或combobox撤消最后一次操作

WM_DESTROYCLIPBOARD 当调用ENPTYCLIPBOARD函数时发送此消息给剪贴板的所有者 

WM_DRAWCLIPBOASEO靠我RD 当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口它允许用剪贴板观察窗口来显示剪贴板的新内容

WM_PAINTCLIPBOARD 当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板SEO靠我观察窗口的客户区需要重画

WM_SIZECLIPBOARD 当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者 

WMSEO靠我_ASKCBFORMATNAME 通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字

WM_CHANGECBCHAIN 当一个窗口从剪贴板观察链中移去SEO靠我时发送此消息给剪贴板观察链的第一个窗口

WM_HSCROLLCLIPBOARD 此消息通过一个剪贴板观察窗口发送给剪贴板的所有者它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪SEO靠我贴板观察窗的水平滚动条上所有者应滚动剪贴板图象并更新滚动条的值

WM_QUERYNEWPALETTE 此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板 

WM_PALESEO靠我TTEISCHANGING 当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序

WM_PALETTECHANGED 此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠SEO靠我的窗口,以此来改变系统调色板

WM_HOTKEY 当用户按下由REGISTERHOTKEY函数注册的热键时提交此消息 

WM_PRINT 应用程序发送此消息仅当WINDOWS或其它应用程序发出一个请求要求绘SEO靠我制一个应用程序的一部分

WM_DDE_INITIATE = WM_DDE_FIRST + 0 一个DDE客户程序提交此消息开始一个与服务器程序的会话来响应那个指定的程序和主题名 

WM_DDE_TERMINSEO靠我ATE = WM_DDE_FIRST + 1 一个DDE应用程序(无论是客户还是服务器)提交此消息来终止一个会话

WM_DDE_ADVISE = WM_DDE_FIRST + 2 一个DDE客户程序提交SEO靠我此消息给一个DDE服务程序来请求服务器每当数据项改变时更新它

WM_DDE_UNADVISE = WM_DDE_FIRST + 3 一个DDE客户程序通过此消息通知一个DDE服务程序不更新指定的项或一个SEO靠我特殊的剪贴板格式的项

WM_DDE_ACK = WM_DDE_FIRST + 4 此消息通知一个DDE(动态数据交换)程序已收到并正处理WM_DDE_POKE , WM_DDE_EXECUTE, WM_SEO靠我DDE_DATA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_INITIAT消息

WM_DDE_DATA = WM_DDE_FIRST + 5 一个DDE服务程SEO靠我序提交此消息给DDE客户程序来传递个一数据项给客户或通知客户的一条可用数据项

WM_DDE_REQUEST = WM_DDE_FIRST + 6 一个DDE客户程序提交此消息给一个DDE服务程序来请求一SEO靠我个数据项的值

WM_DDE_POKE = WM_DDE_FIRST + 7 一个DDE客户程序提交此消息给一个DDE服务程序,客户使用此消息来请求服务器接收一个未经同意的数据项服务器通过答复WM_DDESEO靠我_ACK消息提示是否它接收这个数据项

WM_DDE_EXECUTE = WM_DDE_FIRST + 8 一个DDE客户程序提交此消息给一个DDE服务程序来发送一个字符串给服务器让它象串行命令一样被处理SEO靠我,服务器通过提交WM_DDE_ACK消息来作回应

Window Messages 

Const WM_NULL = &H0 

Const WM_CREATE = &H1 

Const WM_DESTROY = &HSEO靠我2

Const WM_MOVE = &H3 

Const WM_SIZE = &H5 

Const WM_ACTIVATE = &H6 

WM_ACTIVATE state values 

Const WA_INACTSEO靠我IVE = 0

Const WA_ACTIVE = 1 

Const WA_CLICKACTIVE = 2 

Const WM_SETFOCUS = &H7 

Const WM_KILLFOCUS = &H8 

ConSEO靠我st WM_ENABLE = &HA

Const WM_SETREDRAW = &HB 

Const WM_SETTEXT = &HC 

Const WM_GETTEXT = &HD 

Const WM_GETTESEO靠我XTLENGTH = &HE

Const WM_PAINT = &HF 

Const WM_CLOSE = &H10 

Const WM_QUERYENDSESSION = &H11 

Const WM_QUIT SEO靠我= &H12

Const WM_QUERYOPEN = &H13 

Const WM_ERASEBKGND = &H14 

Const WM_SYSCOLORCHANGE = &H15 

Const WM_ENDSSEO靠我ESSION = &H16

Const WM_SHOWWINDOW = &H18 

Const WM_WININICHANGE = &H1A 

Const WM_DEVMODECHANGE = &H1B 

ConsSEO靠我t WM_ACTIVATEAPP = &H1C

Const WM_FONTCHANGE = &H1D 

Const WM_TIMECHANGE = &H1E 

Const WM_CANCELMODE = &H1SEO靠我F

Const WM_SETCURSOR = &H20 

Const WM_MOUSEACTIVATE = &H21 

Const WM_CHILDACTIVATE = &H22 

Const WM_QUEUESYSEO靠我NC = &H23

Const WM_GETMINMAXINFO = &H24 

Const WM_PAINTICON = &H26 

Const WM_ICONERASEBKGND = &H27 

Const WSEO靠我M_NEXTDLGCTL = &H28

Const WM_SPOOLERSTATUS = &H2A 

Const WM_DRAWITEM = &H2B 

Const WM_MEASUREITEM = &H2C 

CSEO靠我onst WM_DELETEITEM = &H2D

Const WM_VKEYTOITEM = &H2E 

Const WM_CHARTOITEM = &H2F 

Const WM_SETFONT = &H30SEO靠我

Const WM_GETFONT = &H31 

Const WM_SETHOTKEY = &H32 

Const WM_GETHOTKEY = &H33 

Const WM_QUERYDRAGICON = &HSEO靠我37

Const WM_COMPAREITEM = &H39 

Const WM_COMPACTING = &H41 

Const WM_OTHERWINDOWCREATED = &H42 no longer SEO靠我suported

Const WM_OTHERWINDOWDESTROYED = &H43 no longer suported 

Const WM_COMMNOTIFY = &H44 no longer SEO靠我suported

notifications passed in low word of lParam on WM_COMMNOTIFY messages 

Const CN_RECEIVE = &H1 

CoSEO靠我nst CN_TRANSMIT = &H2

Const CN_EVENT = &H4 

Const WM_WINDOWPOSCHANGING = &H46 

Const WM_WINDOWPOSCHANGED SEO靠我= &H47

Const WM_POWER = &H48 

wParam for WM_POWER window message and DRV_POWER driver notification 

ConstSEO靠我 PWR_OK = 1

Const PWR_FAIL = (-1) 

Const PWR_SUSPENDREQUEST = 1 

Const PWR_SUSPENDRESUME = 2 

Const PWR_CRISEO靠我TICALRESUME = 3

Const WM_COPYDATA = &H4A 

Const WM_CANCELJOURNAL = &H4B 

Type COPYDATASTRUCT 

dwData As LonSEO靠我g

cbData As Long 

lpData As Long 

End Type 

Const WM_NCCREATE = &H81 

Const WM_NCDESTROY = &H82 

Const WM_NCCALSEO靠我CSIZE = &H83

Const WM_NCHITTEST = &H84 

Const WM_NCPAINT = &H85 

Const WM_NCACTIVATE = &H86 

Const WM_GETDLSEO靠我GCODE = &H87

Const WM_NCMOUSEMOVE = &HA0 

Const WM_NCLBUTTONDOWN = &HA1 

Const WM_NCLBUTTONUP = &HA2 

ConstSEO靠我 WM_NCLBUTTONDBLCLK = &HA3

Const WM_NCRBUTTONDOWN = &HA4 

Const WM_NCRBUTTONUP = &HA5 

Const WM_NCRBUTTONSEO靠我DBLCLK = &HA6

Const WM_NCMBUTTONDOWN = &HA7 

Const WM_NCMBUTTONUP = &HA8 

Const WM_NCMBUTTONDBLCLK = &HA9SEO靠我

Const WM_KEYFIRST = &H100 

Const WM_KEYDOWN = &H100 

Const WM_KEYUP = &H101 

Const WM_CHAR = &H102 

Const WMSEO靠我_DEADCHAR = &H103

Const WM_SYSKEYDOWN = &H104 

Const WM_SYSKEYUP = &H105 

Const WM_SYSCHAR = &H106 

Const WSEO靠我M_SYSDEADCHAR = &H107

Const WM_KEYLAST = &H108 

Const WM_INITDIALOG = &H110 

Const WM_COMMAND = &H111 

ConsSEO靠我t WM_SYSCOMMAND = &H112

Const WM_TIMER = &H113 

Const WM_HSCROLL = &H114 

Const WM_VSCROLL = &H115 

Const WSEO靠我M_INITMENU = &H116

Const WM_INITMENUPOPUP = &H117 

Const WM_MENUSELECT = &H11F 

Const WM_MENUCHAR = &H120SEO靠我

Const WM_ENTERIDLE = &H121 

Const BM_CLICK = &HF5 单击

Const WM_CTLCOLORMSGBOX = &H132 

Const WM_CTLCOLOREDSEO靠我IT = &H133

Const WM_CTLCOLORLISTBOX = &H134 

Const WM_CTLCOLORBTN = &H135 

Const WM_CTLCOLORDLG = &H136 

CoSEO靠我nst WM_CTLCOLORSCROLLBAR = &H137

Const WM_CTLCOLORSTATIC = &H138 

Const WM_MOUSEFIRST = &H200 

Const WM_MSEO靠我OUSEMOVE = &H200

Const WM_LBUTTONDOWN = &H201 

Const WM_LBUTTONUP = &H202 

Const WM_LBUTTONDBLCLK = &H203SEO靠我

Const WM_RBUTTONDOWN = &H204 

Const WM_RBUTTONUP = &H205 

Const WM_RBUTTONDBLCLK = &H206 

Const WM_MBUTTONSEO靠我DOWN = &H207

Const WM_MBUTTONUP = &H208 

Const WM_MBUTTONDBLCLK = &H209 

Const WM_MOUSELAST = &H209 

Const SEO靠我WM_PARENTNOTIFY = &H210

Const WM_ENTERMENULOOP = &H211 

Const WM_EXITMENULOOP = &H212 

Const WM_MDICREATESEO靠我 = &H220

Const WM_MDIDESTROY = &H221 

Const WM_MDIACTIVATE = &H222 

Const WM_MDIRESTORE = &H223 

Const WM_MSEO靠我DINEXT = &H224

Const WM_MDIMAXIMIZE = &H225 

Const WM_MDITILE = &H226 

Const WM_MDICASCADE = &H227 

Const WSEO靠我M_MDIICONARRANGE = &H228

Const WM_MDIGETACTIVE = &H229 

Const WM_MDISETMENU = &H230 

Const WM_DROPFILES =SEO靠我 &H233

Const WM_MDIREFRESHMENU = &H234 

Const WM_CUT = &H300 

Const WM_COPY = &H301 

Const WM_PASTE = &H302SEO靠我

Const WM_CLEAR = &H303 

Const WM_UNDO = &H304 

Const WM_RENDERFORMAT = &H305 

Const WM_RENDERALLFORMATS = SEO靠我&H306

Const WM_DESTROYCLIPBOARD = &H307 

Const WM_DRAWCLIPBOARD = &H308 

Const WM_PAINTCLIPBOARD = &H309 

CSEO靠我onst WM_VSCROLLCLIPBOARD = &H30A

Const WM_SIZECLIPBOARD = &H30B 

Const WM_ASKCBFORMATNAME = &H30C 

Const SEO靠我WM_CHANGECBCHAIN = &H30D

Const WM_HSCROLLCLIPBOARD = &H30E 

Const WM_QUERYNEWPALETTE = &H30F 

Const WM_PASEO靠我LETTEISCHANGING = &H310

Const WM_PALETTECHANGED = &H311 

Const WM_HOTKEY = &H312 

Const WM_PENWINFIRST = SEO靠我&H380

Const WM_PENWINLAST = &H38F
“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2