c++ 编辑控件在内部如何工作?类windowProcedure和分配的缓冲区

xvw2m8pv  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(102)

CreateWindowEx创建一个窗口,如果将lpClassName参数设置为"Edit",则会创建一个编辑框。
我知道lpClassName有自己的WindowProcedure注册到它的结构中,这个过程处理所有与编辑框交互的消息。
假设我们有几个编辑框,每个编辑框都有自己的缓冲区。我不明白的是,WindowProcedure怎么知道要处理哪个缓冲区?例如,在按下一个键时,或者当你使用SendMessage()/GetMessage()时,你只传递窗口句柄。因为,你没有指定要使用哪个缓冲区,共享(编辑控件之间)WindowsProcedure如何确定缓冲区?
我想这是内部的。但是怎么做到的呢?它是否有一个编辑框结构的内部列表,在列表中它将窗口句柄与每个编辑框分配的缓冲区相关联,并循环通过它们来找到由句柄决定的缓冲区?

disbfnqx

disbfnqx1#

创建Edit框时,它可能会在内存中创建一个对象,以保存有关Edit的数据、状态等信息,然后将该对象保存在HWND本身中(如何保存是一个实现细节-例如,WNDCLASS::cbWndExtra可用于在HWND内留出额外字节以保存指向该对象的指针)。缓冲区将是该对象的成员。HWND只引用拥有对象的窗口,编辑的WindowProc知道对象是如何存储的,因此知道如何从任何一个HWND访问它(例如,通过使用GetWindowLongPtr()等)。
如果你想要 * 确定的实现细节 *,你必须向微软询问(或者对user32comctl32库进行反向工程,或者在线查找泄漏的源代码)。

相关问题