子类化和自动消息翻译

子类化是一种技术,它允许应用程序在窗口过程有机会处理消息之前截获和处理发送到特定窗口或发布到特定窗口的消息。 操作系统会自动将消息转换为 Windows (ANSI) 代码页Unicode 窗体,具体取决于已子类化窗口过程的函数的形式。

以下对 SetWindowLongA 函数的调用将子类与 hWnd 参数标识的窗口关联的当前窗口过程。 或者,应用程序可以使用 SetWindowLongPtrA。 新窗口过程 NewWndProc 将接收包含 Windows 代码页格式的文本的消息。

OldWndProc = (WNDPROC) SetWindowLongA(hWnd,
             GWL_WNDPROC, (LONG)NewWndProc); 

当 NewWndProc 完成消息处理后,它将使用 CallWindowProc 函数,如下所示将消息传递到 OldWndProc

CallWindowProc(OldWndProc, hWnd, uMessage, wParam, lParam);

如果 OldWndProc 是使用 UNICODE 类样式创建的,则消息将从 NewWndProc 收到的 Windows 代码页窗体转换为 Unicode。

同样,对 SetWindowLongWSetWindowLongPtrW 函数的调用使用预期 Unicode 文本消息的窗口过程子类化当前窗口过程。 如有必要,在 处理 CallWindowProc 函数期间执行消息转换。

有关子类化的详细信息,请参阅 窗口过程

使用 Unicode 和字符集