分配文本缓冲区

【勇芳软件工作室】汉化HomePreviousNext

当Windows创建编辑控件时,它会自动创建文本缓冲区,设置其初始大小,并根据需要增加大小。对于单行编辑控件,大小可以达到约32千字节的预定义限制。因为这个限制可以改变,所以称为软限制。通过向编辑控件发送EM_SETLIMITTEXT消息,应用程序可以设置缓冲区大小的硬限制。如果缓冲区超过任一限制,Windows将向该应用发送一条EN_ERRSPACE消息。应用程序可以通过发送EM_GETLIMITTEXT消息来检索当前文本限制。

Windows通常在对话框中创建编辑控制缓冲区,使用应用程序数据段外的内存。应用程序可以通过在创建编辑控件时使用DS_LOCALEDIT样式来抑制此默认分配行为并从其本地堆创建缓冲区。使用DS_LOCALEDIT样式的应用程序负责所有缓冲区分配。要进行初始分配,应用程序可以调用LocalAlloc函数,并通过发送EM_SETHANDLE消息将返回的缓冲区句柄传递给编辑控件。为了进行后续分配(例如响应于EN_ERRSPACE消息),应用程序应保存当前缓冲区内容(如有必要)并获取新缓冲区,如下所示:

1.通过发送控件EM_GETHANDLE消息,取消当前为多行编辑控件中文本分配的内存的句柄。

2.通过调用LocalFree函数释放缓冲区。

通过调用LocalAlloc来获取一个新的缓冲区(和缓冲区句柄)。

发送控件一个EM_SETHANDLE消息给Windows的缓冲区句柄。

EM_SETHANDLE和EM_GETHANDLE消息仅适用于多行编辑控件。

使用默认分配行为(即不使用DS_LOCALEDIT样式)的应用程序不得向编辑控件发送EM_SETHANDLE和EM_GETHANDLE消息。

发送EM_SETHANDLE消息有几个副作用:它清除撤消标志(使EM_CANUNDO消息返回零),它清除修改标志(使EM_GETMODIFY消息返回零),并重绘编辑控制窗口。