WM_SETTEXT用于基因

WM_SETTEXT counterpart for substring

本文关键字:用于 SETTEXT WM      更新时间:2023-10-16

正如我从WM_SETTEXT的文档中获取的那样,它期望"指向null终止的字符串"。

我想知道是否有同等版本适用于非终止终止字符串,大概是乘坐指针(到字符串的开头(和一个数字(表示字符串的长度(,但是我可以什么都没找到。我错过了什么?或者甚至还有更深层的原因为什么没有这样的设施?

没有这样的功能,因为它不是必需的。如果您想将窗口文本设置为程序中字符串的子字符串,则可以将该子字符串复制到新字符串并将其传递给WM_SETTEXT

请记住,Win32是低级API。它已经是一个很大的API。如果提供您正在寻找的便利方法,它将更大。如果您希望有这样的方便,那么您就可以自由自己包装Win32功能。

这里也没有任何真正的绩效含义。是的,将子弦复制到null终止的缓冲区将花费您花费,但是与实际发送WM_SETTEXT Mesage的成本相比,该费用很小,并具有UI更新。

在某种程度上相关的是多行编辑控件的功能。由于这些包含比窗口字幕,单线编辑,静态文本控件等要大得多的文本,因此它们确实允许您在控件内的子串上操作。例如,查看EM_REPLACESEL消息,该消息使您可以在控件中修改子弦,而不是被迫替换整个文本。出于绩效原因至关重要。

这纯粹是出于C样式原因。编程窗口的主要语言是在设计Winapi时C,C仅与零终止字符串一起使用。

您只需通过指针操作就可以实现想要的目标。

char s[] = "hey there";
char s2[32] = {0};
strncpy(s2, s + 4, 5); // s2 will contain "there..."
SendMessageA(hwnd, WM_SETTEXT, NULL, (LPARAM)s2);