Winapi 传递给SetWindowText的窗口标题的最大长度是多少?

Winapi 传递给SetWindowText的窗口标题的最大长度是多少?,winapi,Winapi,函数的文档没有对可用作窗口标题的字符串长度设置限制 在(通过调用SetWindowText发送的消息)的文档中,注意此消息处理的返回值可能为: FALSE(对于编辑控件),LB_ERRSPACE(对于列表框),或者CB_ERRSPACE(对于组合框),如果没有足够的空间来设置编辑控件中的文本 但是,它没有说明设置窗口标题时的情况。是设置了严格的限制,还是由程序员根据常识提供自己的标题长度限制 我之所以发布这篇文章,是因为我正在开发一个图形引擎,它允许用户为主窗口提供自己的标题。我的想法是定义一

函数的文档没有对可用作窗口标题的字符串长度设置限制

在(通过调用SetWindowText发送的消息)的文档中,注意此消息处理的返回值可能为:

FALSE(对于编辑控件),LB_ERRSPACE(对于列表框),或者CB_ERRSPACE(对于组合框),如果没有足够的空间来设置编辑控件中的文本

但是,它没有说明设置窗口标题时的情况。是设置了严格的限制,还是由程序员根据常识提供自己的标题长度限制


我之所以发布这篇文章,是因为我正在开发一个图形引擎,它允许用户为主窗口提供自己的标题。我的想法是定义一个常数,比如

const static int MAX_APP_TITLE_LENGTH = /* ??? */;
在我的应用程序类中,检查用户提供的标题字符串的长度

如果标题字符串太长,我可以抛出一条警告消息并将其截断,而不是直接将其传递到SetWindowText中,从而产生意想不到的后果



编辑:在评论中进行了一些讨论之后,似乎即使使用长度为100000的字符串作为窗口标题,Windows也不会抱怨,因此这个问题不值得担心(当然,除了输入的基本清理之外)

是什么激发了这个问题?我不认为操作系统强加了一个限制。您可以设置任意长度。相同的API用于设置控件中的文本,例如编辑控件,它可以存储大量文本(可能是64k?为什么听起来正确?)。如果您试图确定要分配的缓冲区大小,则可以使用
WM_GETTEXTLENGTH
消息检索长度。只需使用100000个字符字符串进行尝试。它起作用了。那应该够了。我想你真的想得太多了。只要让用户提供他们想要的任意长的名称即可。如果他们提供的名称太长,他们无论如何都无法看到它。在系统抱怨之前,屏幕上的像素就用完了。您正计划无缘无故地破坏屏幕。让用户传递一个
std::wstring
,不要强加任意限制。如果发送
WM_SETTEXT
失败,则引发异常。