如何以编程方式追加到一个编辑控件的文本

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 109550
概要
基于 Windows 的应用程序通常使用编辑控件显示文本。有时,这些应用程序需要将文本追加到一个编辑控件,而不是替换现有的文本的末尾。有两种不同的方式来在 Windows 中执行此操作:
  • 使用 EM_SETSEL 和 EM_REPLACESEL 消息。
  • 使用与剪贴板功能 EM_SETSEL 消息将文本追加到编辑控件的缓冲区。
更多信息
注: 由于 EM_SETSEL 消息的消息参数是 32 位版本和 16 位版本之间不同,下面的代码使用 Win32 宏以确定在生成时,如果这是一个 16 或 32-位应用程序。

EM_SETSEL 消息可用于将 Windows 编辑控件中的选定的文本的区域。范围的起始和结束位置设置为相同位置,如果没有选定任何区域,可以将插入符号放置在该位置。若要将插入符号放置在 Windows 编辑控件中文本的末尾,并将焦点设置到编辑控件执行以下操作:
   HWND hEdit = GetDlgItem (hDlg, ID_EDIT);   int ndx = GetWindowTextLength (hEdit);   SetFocus (hEdit);   #ifdef WIN32      SendMessage (hEdit, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx);   #else      SendMessage (hEdit, EM_SETSEL, 0, MAKELONG (ndx, ndx));   #endif
后插入符号放置在编辑控件中的最后,您可以使用该 EM_REPLACESEL 将文本追加到编辑控件。应用程序发送到替换 lpszReplace (lParam) 参数所指定文本在编辑控件中的当前所选内容 EM_REPLACESEL 邮件。 因为当前没有选定内容在当前插入符号位置插入替换文本。本示例将所选内容设置为编辑控件的末尾,并将文本插入到缓冲区中:
   #ifdef WIN32      SendMessage (hEdit, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx);   #else      SendMessage (hEdit, EM_SETSEL, 0, MAKELONG (ndx, ndx));   #endif      SendMessage (hEdit, EM_REPLACESEL, 0, (LPARAM) ((LPSTR) szBuffer));				
将文本插入到编辑控件的另一种方式是使用 Windows 剪贴板。如果应用程序已打开剪贴板或查找方便地打开剪贴板,并将文本复制到剪贴板,然后它可以编辑控件来将文本追加到发送 WM_PASTE 消息。当然,在 $ 剪贴板中的任何数据都将丢失。

在发送 WM_PASTE 消息之前必须将插入符号放置在使用 EM_SETSEL 消息在编辑控件文本的结尾。下面是"伪"代码演示如何实现此方法:
   OpenClipBoard () ;   EmptyClipBoard() ;   SetClipBoardData() ;   #ifdef WIN32      SendMessage (hEdit, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx);   #else      SendMessage (hEdit, EM_SETSEL, 0, MAKELONG (ndx, ndx));   #endif      SendMessage (hEdit, WM_PASTE,   0, 0L);				
此"伪"代码将文本追加到末尾的编辑控件。请注意,在 $ 剪贴板中的数据必须是 CF_TEXT 格式。

属性

文章 ID:109550 - 上次审阅时间:07/11/2005 22:35:52 - 修订版本: 1.3

Microsoft Platform Software Development Kit-January 2000 Edition, Microsoft Windows 软件开发工具包 3.1

  • kbmt kbctrl kbeditctrl kbhowto KB109550 KbMtzh
反馈