词条 | SendMessage |
释义 | 函数功能该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。 函数原型LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam); 参数: hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。 Msg:指定被发送的消息。 wParam:指定附加的消息特定信息。 IParam:指定附加的消息特定信息。 返回值:返回值指定消息处理的结果,依赖于所发送的消息。 备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息。 如果指定的窗口是由正在调用的线程创建的,则窗口程序立即作为子程序调用。如果指定的窗口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止。 Windows CE:Windows CE不支持Windows桌面平台支持的所有消息。使用SendMesssge之前,要检查发送的消息是否被支持。 速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI方式实现。 SendMessage函数使用实例 程序控制拉下或收起组合框的下拉列来 一般情况下,为了拉下或收起组合框的下拉列表,需要用键盘或鼠标进行操作,而有时我们希望程序运行的某个时刻自动拉出下拉列表(比如在一些演示程序中),为了实现这个目的,我们也只有借助于SendMessage函数,方法是发一个CB_SHOWDROPDOWN(&H14F)消息给组合框。 在发CB_SHOWDROPDOWN消息时,wParam参数决定了是拉下列表(=True时)还是收起列表(=False时),lParam无用(设为0)。 举例说明------------- C# ------------- 一、API 命名空间 using System.Runtime.InteropServices; 函数原型 [DllImport("user32.dll ", EntryPoint = "SendMessage ")] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, string lParam); 二、CLT 命名空间 Microsoft.WindowsCE.Forms 函数语法 public static void SendMessage( ref Message m ) 用法示例 Message msg = Message.Create(MsgWin.Hwnd, MsgWindow.WM_CUSTOMMSG, (IntPtr)e.X, (IntPtr)e.Y); MessageWindow.SendMessage(ref msg); ------------- VB ------------- Private Declare Function SendMessage Lib "user32" Alias _ "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal _ wParam As Long, lParam As Any) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String _ ) As Long Private Const WM_close = 16 Private Sub Command1_Click() Dim winHwnd As Long Dim lngRetVal As Long winHwnd = FindWindow("IEFrame", vbNullString) Debug.Print winHwnd If winHwnd <> 0 Then RetVal = SendMessage(winHwnd, WM_close, 0&, 0&) Else MsgBox "IE没有运行。" End If End Sub ------------- C++ ----------------- #include "windows.h" int main(int argc, char* argv[]) { HWND hWnd = ::FindWindow(NULL,"QQ2010"); if( hWnd != NULL) { ::SendMessage(hWnd,WM_CLOSE,0,0); } return 0; } 为说明具体的使用方法,下面提供简单的程序片段。首先在代码模块中做如下声明: Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long Const CB_SHOWDROPDOWN=&H14F 当程序中某处需要拉下组合框Combol的列表时,写如下调用语句: SendMessage Combol.hwnd,CB_SHOWDROPDOWN,True,0 当需要收起组合框Combol的列表时,写如下语句: SendMessage Combol.hwnd,CB_SHOWDROPDOWNN,False,0 The following are the ranges of message numbers. Range Meaning 0 through WM_USER–1 Messages reserved for use by the system. WM_USER through 0x7FFF Integer messages for use by private window classes. WM_APP through 0xBFFF Messages available for use by applications. 0xC000 through 0xFFFF String messages for use by applications. Greater than 0xFFFF Reserved by the system. Message numbers in the first range (0 through WM_USER–1) are defined by the system. Values in this range that are not explicitly defined are reserved by the system. Message numbers in the second range (WM_USER through 0x7FFF) can be defined and used by an application to send messages within a private window class. These values cannot be used to define messages that are meaningful throughout an application, because some predefined window classes already define values in this range. For example, predefined control classes such as BUTTON, EDIT, LISTBOX, and COMBOBOX may use these values. Messages in this range should not be sent to other applications unless the applications have been designed to exchange messages and to attach the same meaning to the message numbers. Message numbers in the third range (0x8000 through 0xBFFF) are available for application to use as private messages. Message in this range do not conflict with system messages. Message numbers in the fourth range (0xC000 through 0xFFFF) are defined at run time when an application calls the RegisterWindowMessage function to retrieve a message number for a string. All applications that register the same string can use the associated message number for exchanging messages. The actual message number, however, is not a constant and cannot be assumed to be the same between different sessions. Message numbers in the fifth range (greater than 0xFFFF) are reserved by the system. #define WM_NULL 0x0000 #define WM_CREATE 0x0001 #define WM_DESTROY 0x0002 #define WM_MOVE 0x0003 #define WM_SIZE 0x0005 #define WM_ACTIVATE 0x0006 /* * WM_ACTIVATE state values */ #define WA_INACTIVE 0 #define WA_ACTIVE 1 #define WA_CLICKACTIVE 2 #define WM_SETFOCUS 0x0007 #define WM_KILLFOCUS 0x0008 #define WM_ENABLE 0x000A #define WM_SETREDRAW 0x000B #define WM_SETTEXT 0x000C #define WM_GETTEXT 0x000D #define WM_GETTEXTLENGTH 0x000E #define WM_PAINT 0x000F #define WM_CLOSE 0x0010 #ifndef _WIN32_WCE #define WM_QUERYENDSESSION 0x0011 #define WM_QUERYOPEN 0x0013 #define WM_ENDSESSION 0x0016 #endif #define WM_QUIT 0x0012 #define WM_ERASEBKGND 0x0014 #define WM_SYSCOLORCHANGE 0x0015 #define WM_SHOWWINDOW 0x0018 #define WM_WININICHANGE 0x001A #if(WINVER >= 0x0400) #define WM_SETTINGCHANGE WM_WININICHANGE #endif /* WINVER >= 0x0400 */ #define WM_DEVMODECHANGE 0x001B #define WM_ACTIVATEAPP 0x001C #define WM_FONTCHANGE 0x001D #define WM_TIMECHANGE 0x001E #define WM_CANCELMODE 0x001F #define WM_SETCURSOR 0x0020 #define WM_MOUSEACTIVATE 0x0021 #define WM_CHILDACTIVATE 0x0022 #define WM_QUEUESYNC 0x0023 #define WM_GETMINMAXINFO 0x0024 /* * Struct pointed to by WM_GETMINMAXINFO lParam */ typedef struct tagMINMAXINFO { POINT ptReserved; POINT ptMaxSize; POINT ptMaxPosition; POINT ptMinTrackSize; POINT ptMaxTrackSize; } MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO; #define WM_PAINTICON 0x0026 #define WM_ICONERASEBKGND 0x0027 #define WM_NEXTDLGCTL 0x0028 #define WM_SPOOLERSTATUS 0x002A #define WM_DRAWITEM 0x002B #define WM_MEASUREITEM 0x002C #define WM_DELETEITEM 0x002D #define WM_VKEYTOITEM 0x002E #define WM_CHARTOITEM 0x002F #define WM_SETFONT 0x0030 #define WM_GETFONT 0x0031 #define WM_SETHOTKEY 0x0032 #define WM_GETHOTKEY 0x0033 #define WM_QUERYDRAGICON 0x0037 #define WM_COMPAREITEM 0x0039 #if(WINVER >= 0x0500) #ifndef _WIN32_WCE #define WM_GETOBJECT 0x003D #endif #endif /* WINVER >= 0x0500 */ #define WM_COMPACTING 0x0041 #define WM_COMMNOTIFY 0x0044 /* no longer suported */ #define WM_WINDOWPOSCHANGING 0x0046 #define WM_WINDOWPOSCHANGED 0x0047 #define WM_POWER 0x0048 /* * wParam for WM_POWER window message and DRV_POWER driver notification */ #define PWR_OK 1 #define PWR_FAIL (-1) #define PWR_SUSPENDREQUEST 1 #define PWR_SUSPENDRESUME 2 #define PWR_CRITICALRESUME 3 #define WM_COPYDATA 0x004A #define WM_CANCELJOURNAL 0x004B /* * lParam of WM_COPYDATA message points to... */ typedef struct tagCOPYDATASTRUCT { ULONG_PTR dwData; DWORD cbData; PVOID lpData; } COPYDATASTRUCT, *PCOPYDATASTRUCT; #if(WINVER >= 0x0400) typedef struct tagMDINEXTMENU { HMENU hmenuIn; HMENU hmenuNext; HWND hwndNext; } MDINEXTMENU, * PMDINEXTMENU, FAR * LPMDINEXTMENU; #endif /* WINVER >= 0x0400 */ #if(WINVER >= 0x0400) #define WM_NOTIFY 0x004E #define WM_INPUTLANGCHANGEREQUEST 0x0050 #define WM_INPUTLANGCHANGE 0x0051 #define WM_TCARD 0x0052 #define WM_HELP 0x0053 #define WM_USERCHANGED 0x0054 #define WM_NOTIFYFORMAT 0x0055 #define NFR_ANSI 1 #define NFR_UNICODE 2 #define NF_QUERY 3 #define NF_REQUERY 4 #define WM_CONTEXTMENU 0x007B #define WM_STYLECHANGING 0x007C #define WM_STYLECHANGED 0x007D #define WM_DISPLAYCHANGE 0x007E #define WM_GETICON 0x007F #define WM_SETICON 0x0080 #endif /* WINVER >= 0x0400 */ #define WM_NCCREATE 0x0081 #define WM_NCDESTROY 0x0082 #define WM_NCCALCSIZE 0x0083 #define WM_NCHITTEST 0x0084 #define WM_NCPAINT 0x0085 #define WM_NCACTIVATE 0x0086 #define WM_GETDLGCODE 0x0087 #ifndef _WIN32_WCE #define WM_SYNCPAINT 0x0088 #endif #define WM_NCMOUSEMOVE 0x00A0 #define WM_NCLBUTTONDOWN 0x00A1 #define WM_NCLBUTTONUP 0x00A2 #define WM_NCLBUTTONDBLCLK 0x00A3 #define WM_NCRBUTTONDOWN 0x00A4 #define WM_NCRBUTTONUP 0x00A5 #define WM_NCRBUTTONDBLCLK 0x00A6 #define WM_NCMBUTTONDOWN 0x00A7 #define WM_NCMBUTTONUP 0x00A8 #define WM_NCMBUTTONDBLCLK 0x00A9 #if(_WIN32_WINNT >= 0x0500) #define WM_NCXBUTTONDOWN 0x00AB #define WM_NCXBUTTONUP 0x00AC #define WM_NCXBUTTONDBLCLK 0x00AD #endif /* _WIN32_WINNT >= 0x0500 */ #if(_WIN32_WINNT >= 0x0501) #define WM_INPUT 0x00FF #endif /* _WIN32_WINNT >= 0x0501 */ #define WM_KEYFIRST 0x0100 #define WM_KEYDOWN 0x0100 #define WM_KEYUP 0x0101 #define WM_CHAR 0x0102 #define WM_DEADCHAR 0x0103 #define WM_SYSKEYDOWN 0x0104 #define WM_SYSKEYUP 0x0105 #define WM_SYSCHAR 0x0106 #define WM_SYSDEADCHAR 0x0107 #if(_WIN32_WINNT >= 0x0501) #define WM_UNICHAR 0x0109 #define WM_KEYLAST 0x0109 #define UNICODE_NOCHAR 0xFFFF #else #define WM_KEYLAST 0x0108 #endif /* _WIN32_WINNT >= 0x0501 */ #if(WINVER >= 0x0400) #define WM_IME_STARTCOMPOSITION 0x010D #define WM_IME_ENDCOMPOSITION 0x010E #define WM_IME_COMPOSITION 0x010F #define WM_IME_KEYLAST 0x010F #endif /* WINVER >= 0x0400 */ #define WM_INITDIALOG 0x0110 #define WM_COMMAND 0x0111 #define WM_SYSCOMMAND 0x0112 #define WM_TIMER 0x0113 #define WM_HSCROLL 0x0114 #define WM_VSCROLL 0x0115 #define WM_INITMENU 0x0116 #define WM_INITMENUPOPUP 0x0117 #define WM_MENUSELECT 0x011F #define WM_MENUCHAR 0x0120 #define WM_ENTERIDLE 0x0121 #if(WINVER >= 0x0500) #ifndef _WIN32_WCE #define WM_MENURBUTTONUP 0x0122 #define WM_MENUDRAG 0x0123 #define WM_MENUGETOBJECT 0x0124 #define WM_UNINITMENUPOPUP 0x0125 #define WM_MENUCOMMAND 0x0126 #ifndef _WIN32_WCE #if(_WIN32_WINNT >= 0x0500) #define WM_CHANGEUISTATE 0x0127 #define WM_UPDATEUISTATE 0x0128 #define WM_QUERYUISTATE 0x0129 /* * LOWORD(wParam) values in WM_*UISTATE* */ #define UIS_SET 1 #define UIS_CLEAR 2 #define UIS_INITIALIZE 3 /* * HIWORD(wParam) values in WM_*UISTATE* */ #define UISF_HIDEFOCUS 0x1 #define UISF_HIDEACCEL 0x2 #if(_WIN32_WINNT >= 0x0501) #define UISF_ACTIVE 0x4 #endif /* _WIN32_WINNT >= 0x0501 */ #endif /* _WIN32_WINNT >= 0x0500 */ #endif #endif #endif /* WINVER >= 0x0500 */ #define WM_CTLCOLORMSGBOX 0x0132 #define WM_CTLCOLOREDIT 0x0133 #define WM_CTLCOLORLISTBOX 0x0134 #define WM_CTLCOLORBTN 0x0135 #define WM_CTLCOLORDLG 0x0136 #define WM_CTLCOLORSCROLLBAR 0x0137 #define WM_CTLCOLORSTATIC 0x0138 #define MN_GETHMENU 0x01E1 #define WM_MOUSEFIRST 0x0200 #define WM_MOUSEMOVE 0x0200 #define WM_LBUTTONDOWN 0x0201 #define WM_LBUTTONUP 0x0202 #define WM_LBUTTONDBLCLK 0x0203 #define WM_RBUTTONDOWN 0x0204 #define WM_RBUTTONUP 0x0205 #define WM_RBUTTONDBLCLK 0x0206 #define WM_MBUTTONDOWN 0x0207 #define WM_MBUTTONUP 0x0208 #define WM_MBUTTONDBLCLK 0x0209 #if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400) #define WM_MOUSEWHEEL 0x020A #endif #if (_WIN32_WINNT >= 0x0500) #define WM_XBUTTONDOWN 0x020B #define WM_XBUTTONUP 0x020C #define WM_XBUTTONDBLCLK 0x020D #endif #if (_WIN32_WINNT >= 0x0500) #define WM_MOUSELAST 0x020D #elif (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400) #define WM_MOUSELAST 0x020A #else #define WM_MOUSELAST 0x0209 #endif /* (_WIN32_WINNT >= 0x0500) */ #if(_WIN32_WINNT >= 0x0400) /* Value for rolling one detent */ #define WHEEL_DELTA 120 #define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) /* Setting to scroll one page for SPI_GET/SETWHEELSCROLLLINES */ #define WHEEL_PAGESCROLL (UINT_MAX) #endif /* _WIN32_WINNT >= 0x0400 */ #if(_WIN32_WINNT >= 0x0500) #define GET_KEYSTATE_WPARAM(wParam) (LOWORD(wParam)) #define GET_NCHITTEST_WPARAM(wParam) ((short)LOWORD(wParam)) #define GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam)) /* XButton values are WORD flags */ #define XBUTTON1 0x0001 #define XBUTTON2 0x0002 /* Were there to be an XBUTTON3, its value would be 0x0004 */ #endif /* _WIN32_WINNT >= 0x0500 */ #define WM_PARENTNOTIFY 0x0210 #define WM_ENTERMENULOOP 0x0211 #define WM_EXITMENULOOP 0x0212 #if(WINVER >= 0x0400) #define WM_NEXTMENU 0x0213 #define WM_SIZING 0x0214 #define WM_CAPTURECHANGED 0x0215 #define WM_MOVING 0x0216 #endif /* WINVER >= 0x0400 */ #if(WINVER >= 0x0400) #define WM_POWERBROADCAST 0x0218 #ifndef _WIN32_WCE #define PBT_APMQUERYSUSPEND 0x0000 #define PBT_APMQUERYSTANDBY 0x0001 #define PBT_APMQUERYSUSPENDFAILED 0x0002 #define PBT_APMQUERYSTANDBYFAILED 0x0003 #define PBT_APMSUSPEND 0x0004 #define PBT_APMSTANDBY 0x0005 #define PBT_APMRESUMECRITICAL 0x0006 #define PBT_APMRESUMESUSPEND 0x0007 #define PBT_APMRESUMESTANDBY 0x0008 #define PBTF_APMRESUMEFROMFAILURE 0x00000001 #define PBT_APMBATTERYLOW 0x0009 #define PBT_APMPOWERSTATUSCHANGE 0x000A #define PBT_APMOEMEVENT 0x000B #define PBT_APMRESUMEAUTOMATIC 0x0012 #endif #endif /* WINVER >= 0x0400 */ #if(WINVER >= 0x0400) #define WM_DEVICECHANGE 0x0219 #endif /* WINVER >= 0x0400 */ #define WM_MDICREATE 0x0220 #define WM_MDIDESTROY 0x0221 #define WM_MDIACTIVATE 0x0222 #define WM_MDIRESTORE 0x0223 #define WM_MDINEXT 0x0224 #define WM_MDIMAXIMIZE 0x0225 #define WM_MDITILE 0x0226 #define WM_MDICASCADE 0x0227 #define WM_MDIICONARRANGE 0x0228 #define WM_MDIGETACTIVE 0x0229 #define WM_MDISETMENU 0x0230 #define WM_ENTERSIZEMOVE 0x0231 #define WM_EXITSIZEMOVE 0x0232 #define WM_DROPFILES 0x0233 #define WM_MDIREFRESHMENU 0x0234 #if(WINVER >= 0x0400) #define WM_IME_SETCONTEXT 0x0281 #define WM_IME_NOTIFY 0x0282 #define WM_IME_CONTROL 0x0283 #define WM_IME_COMPOSITIONFULL 0x0284 #define WM_IME_SELECT 0x0285 #define WM_IME_CHAR 0x0286 #endif /* WINVER >= 0x0400 */ #if(WINVER >= 0x0500) #define WM_IME_REQUEST 0x0288 #endif /* WINVER >= 0x0500 */ #if(WINVER >= 0x0400) #define WM_IME_KEYDOWN 0x0290 #define WM_IME_KEYUP 0x0291 #endif /* WINVER >= 0x0400 */ #if((_WIN32_WINNT >= 0x0400) || (WINVER >= 0x0500)) #define WM_MOUSEHOVER 0x02A1 #define WM_MOUSELEAVE 0x02A3 #endif #if(WINVER >= 0x0500) #define WM_NCMOUSEHOVER 0x02A0 #define WM_NCMOUSELEAVE 0x02A2 #endif /* WINVER >= 0x0500 */ #if(_WIN32_WINNT >= 0x0501) #define WM_WTSSESSION_CHANGE 0x02B1 #define WM_TABLET_FIRST 0x02c0 #define WM_TABLET_LAST 0x02df #endif /* _WIN32_WINNT >= 0x0501 */ #define WM_CUT 0x0300 #define WM_COPY 0x0301 #define WM_PASTE 0x0302 #define WM_CLEAR 0x0303 #define WM_UNDO 0x0304 #define WM_RENDERFORMAT 0x0305 #define WM_RENDERALLFORMATS 0x0306 #define WM_DESTROYCLIPBOARD 0x0307 #define WM_DRAWCLIPBOARD 0x0308 #define WM_PAINTCLIPBOARD 0x0309 #define WM_VSCROLLCLIPBOARD 0x030A #define WM_SIZECLIPBOARD 0x030B #define WM_ASKCBFORMATNAME 0x030C #define WM_CHANGECBCHAIN 0x030D #define WM_HSCROLLCLIPBOARD 0x030E #define WM_QUERYNEWPALETTE 0x030F #define WM_PALETTEISCHANGING 0x0310 #define WM_PALETTECHANGED 0x0311 #define WM_HOTKEY 0x0312 #if(WINVER >= 0x0400) #define WM_PRINT 0x0317 #define WM_PRINTCLIENT 0x0318 #endif /* WINVER >= 0x0400 */ #if(_WIN32_WINNT >= 0x0500) #define WM_APPCOMMAND 0x0319 #endif /* _WIN32_WINNT >= 0x0500 */ #if(_WIN32_WINNT >= 0x0501) #define WM_THEMECHANGED 0x031A #endif /* _WIN32_WINNT >= 0x0501 */ #if(WINVER >= 0x0400) #define WM_HANDHELDFIRST 0x0358 #define WM_HANDHELDLAST 0x035F #define WM_AFXFIRST 0x0360 #define WM_AFXLAST 0x037F #endif /* WINVER >= 0x0400 */ #define WM_PENWINFIRST 0x0380 #define WM_PENWINLAST 0x038F 常用编辑控件消息:EC_LEFTMARGIN EC_USEFONTINF 设置左边距时使用 EC_RIGHTMARGIN EC_USEFONTINF 设置右边距时使用 EC_USEFONTINF,O, 边距 设置编辑控件的左、右边距,当wParam含EC_LEFTMARGIN时在lParam的低16位指定左边距点数,当wParam含EC_RIGHTMARGIN时在lParam的高16位指定右边距点数。当指定wParam为EC_USEFONTINFO时,则用当前字体的字符"A"的宽度指定右边距和字符"C"的宽度指定左边距lParam被忽略。 EM_CHARFROMPOS(&HD7=215),0, 取得编辑控件中指定位置的字符相对于文本头部的偏移量。使用本操作应先在第4个参数的高16位指定行号,低16位指定列号(或一个POINTAPI结构),行列是按编辑控件的客户区左上角为原点(0,0)计算的。如果指定的位置超出控件客户区则返回-1 EM_CANUNDO(&HC6=198),0,0 决定前一次编辑操作是否能够撤消:检测控件撤消缓冲区是否为空,通常控件把最后一次在控件的编辑操作保存在一个撤消缓冲区,如果缓冲区非空则返回TRUE表示上次操作可以撤消,否则返回FALSE,应用程序可以利用该返回值来禁止或允许菜单或工具条的"撤消"项。 EM_EMPTYUNDOBUFFER(&HCD=205 ),0,0 清除控件的撤消缓冲区,使其不能撤消前一次编辑操作 EM_FMTLINES(&HC8=200) 决定是否在取回的文本宇串中包含软回车字符 EM_GETFIRSTVISIBLEINE(&HCE=206),0,0 获得文本控件中处于可见位置的最顶部的文本所在的行号 EM_GETLINE(&HC4=196 ),行号,ByVal 变量 获取编辑控件某一行的内容,变量须预先赋空格 EM_GETLINECOUNT(&HBA=186,0,0 获取编辑控件的总行数 EM_GETMODIFY(&HB8=184),0,0 判断编辑控件的内容是否已发生变化,返回TRUE则控件文本已被修改,返回FALSE则未变。 EM_GETPASSWORDCHAR( ),0,0 获取编辑控件的密码字符,返回NULL表示没有字符 EM_GETRECT(&HB2=178),0,结构 获取编辑控件的格式化矩形 EM_GETTHUMB(&HBE=190),0,0 取得多行文本编辑控件的滚动框的当前位置(注意:是象素值) EM_GETSEL(&HB0=176),0,变量 获取光标位置(以字节数表示),或:(缓冲区起点,缓冲区终点)取得编辑控件中选定内容的范围,返回值中低16位为起点,高16位为终点 EM_GETHANDLE(&HBD=189),0,0 取得文本缓冲区 EM_GETWORDBREAKPROC(&HD1=209),0,0 取得整字换行回调函数EditWordBreakProc指针 EM_GETLIMITTEXT(WM_USER+37=1061),0,0 获取一个编辑控件中文本的最大长度 EM_GETMARGINS( ),0,0 获取编辑控件的左、右边距,返回值低16位为左边距,高16位为右边距(不得用于NT3.51) EM_LIMITTEXT(&HC5=197),最大值,0 设置编辑控件中的文本长度 EM_SCROLLCARET(&HB7=183),0,0 把可见范围移至光标处 EM_LINEFROMCHAR(&HC9=201),偏移值,0 获取指定位置(或:-1,0 表示光标位置)所在的行号 EM_LINEINDEX(&HBB=187),行号,0 获取指定行(或:-1,0 表示光标所在行)首字符在文本中的位置(以字节数表示) EM_LINELENGTH(&hC1=193),偏移值,0 获取指定位置所在行(或:-1,0 表示光标所在行)的文本长度(以字节数表示) EM_POSFROMCHARPOINT,结构地址,偏移值 取得指定字符位置的行列号,偏移值是字符相对于文本头部的偏移。 EM_LINESCROLL(&HB6=182),列数,行数 指定行数的文本水平滚动,每次滚动N列 EM_EXGETSEL(&H434=1076) EM_EXSETSEL(&H437=1079),0,结构 RichEdit控件设置文本选定范围,参阅 EM_SETSEL 消息,结构是指 CHARRANGE 结构 EM_PASTESPECIAL(&H440=1088),2(1),1 RichEdit控件粘贴剪贴板中的位图(或文本) EM_FINDTEXT(&H738=1080) RichEdit控件正文搜索操作 EM_FINDTEXTEX(&H44F=1103) 同上 EM_SETTEXTEX(&H461=1121) RichEdit控件正文替换/插入操作 EM_SETTARGETDEVICE, GetDC(RichText.hWnd), RichText.Width / 15) 设置 RichTextBox 自动换行,后续代码是:RichText.RightMargin = iif(RichText.RightMargin = 0,1,0) EM_SETTARGETDEVICE, 0, 1 设置 RichTextBox 不自动换行 EM_POSFROMCHAR(&HD6或&H426) 判断指定字符在编辑控件的位置(用于NT3.51) EM_SCROLL(&HB5=181),*,0 文本垂直滚动。第三个参数*控制滚动方向:SB_LINEDOWN(1)向下滚动一行,SB_LINEUP(0)向上滚动一行,SB_PAGEDOWN(3)向下滚动一页,SB_PAGEUP(2)向上滚动一页。 EM_REPLACESEL(&HC2=194),1(0), 字符串 用指定字符串替换编辑控件中的当前选定内容,如果第三个参数wParam为1,则本次操作允许撤消,0禁止撤消。字符串可用传值方式,也可用传址方式(例:SendMessage Text1.hwnd, EM_REPLACESEL, 0, Text2.Text '这是传值方式) EM_SETSEL(&HB1=177), 起点,终点 设置编辑控件中文本选定内容范围(或设置光标位置),该范围被反相显示,用于为复制、替换、粘贴、剪切、删除等编辑功能指定范围,光标将被移至指定的终点后面。还可使用指定相同起点和终点来移动光标而不是选定范围。当指定的起点等于0和终点等于-1时,文本全部被选中,此法常用在清空编辑控件。当指定的起点等于-2和终点等于-1时,全文均不选,光标移至文本未端,此法常用在文本未端追加内容。注意:当控件没有输入焦点时,本操作将会失败,一般在执行本操作前都应调用SetFocus先取得输入焦点。 EM_UNDO(&HC7=199),0,0 撤消前一次编辑操作,当重复发送本消息,控件将在撤消和恢复中来回切换 EM_SETCHARFORMAT(&H444) 改变选定文本的颜色 EM_SETHANDLE(&HBC=188),缓冲区指针,0 为编辑控件指定新的文本缓冲区。此操作仅适用对话框创建带DS_LOCALEDIT风格的控件。 EM_SETLIMITTEXT,长度(字节),0 设置编辑控件中的文本最大长度(不得用于NT3.51) EM_SETMARGINS(&HD3=211) 设置编辑控件的左、右边距(不得用于NT3.51) EM_SETMODIFY(&HB9=185),1(0),0 设置或清除一个编辑控件的修改标志 EM_SETPASSWORDCHAR(&HCC=204),字符,0 指定控件用来显示密码的字符,缺省为"*"。当第三个参数wParam为0时,本操作将清除控件的ES_PASSWORD风格,并按实际字符显示。 EM_SETREADONLY(&HCF=207),1(0),0 决定是否将编辑控件设为只读,同时决定控件的ES_READONLY风格 EM_SETRECT(&HB3=179),0(或RECT),结构地址 为一个编辑控件设置格式化矩形 EM_SETRECTNP(&HB4=180),0(或RECT),结构地址 为一个编辑控件设置格式化矩形,只是控件此时不会重画 EN_CHANGE(&H300=768) 编辑控件的内容发生改变。与EN_UPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的。 EN_ERRSPACE(&H500=1280) 任何时候只要由于内存不足以完成一项编辑操作 EN_HSCROLL(&H601=1537) 用户单击了编辑控件的水平滚动条。注意:这条消息是在控件更新显示之前发送出去的。 EN_VSCROLL(&H602=1538) 用户单击了编辑控件的垂直滚动条。注意:这条消息是在控件更新显示之前发送出去的。 EN_KILLFOCUS(&H200=512) 编辑控件失去了输入焦点 EN_SETFOCUS(&H100=256) 编辑控件获得了输入焦点 EN_UPDATE(&H400=1024) 控件准备显示改变了的正文时发送该消息。它与EN_CHANGE通知消息相似,只是它发生于更新文本显示出来之前。 EN_MAXTEXT(&H501=1281) 用户输人的文字数超出由EM_LIMITTEXT消息规定的界限,或超出由VB Maxlength属性规定的界限,就会发送这条消息 。此外,倘若不允许自动进行水平滚动,同时插入点要超出控件的宽度;或者不允许自动垂直滚动,同时插入点要超出控件的高度,那么也会触发这条消息。在没有 ES_AUTOHSCROLL或ES_AUTOVSCROLL的编辑框中,当正文超出了编辑框的边框时也会发出该消息。 编辑风格消息:ES_MULTILINE 指定编辑控件能否进行多行文本编辑,若多行编辑器不指定ES_AUTOHSCROLL风格,则会自动换行,用户每按一次Enter,在当前光标处输入一个回车换行符(0Dh,0Ah),文本增加一行。若不指定ES_AUTOVSCROLL,则多行编辑器会在窗口中正文装满时发出警告声响。 ES_LEFT 文本显示居左。 ES_CENTER 文本显示居中。 ES_RIGHT 文本显示居右。 ES_LOWERCASE 把用户输入的字母统统转换成小写字母。 ES_UPPERCASE 把用户输入的字母统统转换成大写字母。 ES_OEMCONVERT 把输入的文本从ANSI码转换成OEM码,然后又转换成ANSI码,目的是保证函数AnsiToOem的正确调用。这在编辑框中包含文件名时是很有用的。 ES_AUTOHSCROLL(自动增加水平滚动条?) 当用户在行尾键入一个字符时,正文将自动向右滚动10个字符,当用户按回车键时,正文总是滚向左边。 ES_AUTOVSCROLL 当用户在最后一个可见行按回车键时,正文向上滚动一页。 ES_NUMBER 只接收数码输入,其它字符输入一律无效。 ES_NOHIDESEL(&H100=256) 当编辑框失去输入焦点时,选中的文本将隐藏,正文中的选择保持不变。缺省时正文中的选择将失效,当获得输入焦点后才又显示出来。 ES_READONLY 将编辑框设置成只读的。 ES_PASSWORD(&H20=32) 使所有键入的字符都用"*"来显示。 ES_WANTRETURN 使多行编辑器接收回车键输入并换行。如果不指定该风格,按回车键会选择缺省的命令按钮,这往往会导致对话框的关闭。 列表框操作:LB_FINDSTRING(&H18F=399),-1,ByVal 字串 查找列表项的字符串,返回值=字符串所在的列表项的索引。-1表示从第0行开始查找,如果改为一个有效的列表项索引值,将从该行开始查找。 LB_ITEMFROMPOINT(&H1A9=425) 获取光标所在的列表项的索引 LB_SETHORIZONTALEXTENT(&H194=404),长度,0 设置列表框的横向滚动条以及滚动长度,长度为象素值 组合框操作:CB_SHOWDROPDOWN(&H14F),1(0),0 打开(关闭)组合框的列表 TVM_SETBKCOLOR(&H1100+29=4381) 设置扩展树型列表控件的背景色(TVM开头的常数) 常用窗口消息:WM_GETFONT(&H31=49) 得到当前控件绘制文本的字体(的句柄) WM_GETTEXT(&HD=13),变量长度,变量 取得窗体的标题,变量须预先赋空字串(chr(0)),变量长度=Len(变量) WM_SETTEXT(&HC=12),0,ByVal "字串" 设置窗体的标题 WM_NCLBUTTONDOWN(&HA1=161),2,0 在非客户区,即边框及标题栏上(假如定义的是一个组件,则非客户区包括Form等)按下鼠标左键; WM_LBUTTONDOWN(&H201=513),2,0 在客户区,也就是除边框及标题栏以外按下鼠标左键 WM_VSCROLL(&H115=277),&H10000*p+SB_THUMBPOSITION(&H4),0 同步滚动文本,p是位置改变量 WM_PAINT WM_USER(&H400=1024) WM_CUT(&H300=768),0,0 剪切 WM_COPY(&H301=769)),0,0 复制 WM_PASTE(&H302=770)),0,0 粘贴 WM_CLEAR(&H303=771)),0,0 删除 WM_UNDO(&H304=772)),0,0 撤消 按钮消息:BM_SETSTYLE(&HF4) 设置按纽样式 BS_RADIOBUTTON(&H4) 收音机旋纽式的按纽,是 BM_SETSTYLE 使用的参数 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。