CreateWindowEx
创建一个窗口,如果将lpClassName
参数设置为"Edit"
,则会创建一个编辑框。
我知道lpClassName
有自己的WindowProcedure
注册到它的结构中,这个过程处理所有与编辑框交互的消息。
假设我们有几个编辑框,每个编辑框都有自己的缓冲区。我不明白的是,WindowProcedure
怎么知道要处理哪个缓冲区?例如,在按下一个键时,或者当你使用SendMessage()
/GetMessage()
时,你只传递窗口句柄。因为,你没有指定要使用哪个缓冲区,共享(编辑控件之间)WindowsProcedure
如何确定缓冲区?
我想这是内部的。但是怎么做到的呢?它是否有一个编辑框结构的内部列表,在列表中它将窗口句柄与每个编辑框分配的缓冲区相关联,并循环通过它们来找到由句柄决定的缓冲区?
1条答案
按热度按时间disbfnqx1#
创建Edit框时,它可能会在内存中创建一个对象,以保存有关Edit的数据、状态等信息,然后将该对象保存在
HWND
本身中(如何保存是一个实现细节-例如,WNDCLASS::cbWndExtra
可用于在HWND
内留出额外字节以保存指向该对象的指针)。缓冲区将是该对象的成员。HWND
只引用拥有对象的窗口,编辑的WindowProc
知道对象是如何存储的,因此知道如何从任何一个HWND
访问它(例如,通过使用GetWindowLongPtr()
等)。如果你想要 * 确定的实现细节 *,你必须向微软询问(或者对
user32
和comctl32
库进行反向工程,或者在线查找泄漏的源代码)。