我正在研究一个 Win32 包装类。我最初是通过以下方式对 EditBox 进行子类化:
// Create the Edit Box
Edit_hWnd = CreateWindowEx(.., "Edit", ...);
Edit_OldProc = (WNDPROC)GetWindowLongPtr(Edit_hWnd, GWLP_WNDPROC);
SetWindowLongPtr(Edit_hWnd, GWLP_WNDPROC, (LONG_PTR)EditWndProc);
// Then in EditWndProc(...):
return CallWindowProc(Edit_OldProc, hWnd, Message, wParam, lParam);
我刚刚遇到了一个新方法,它设置了带有系统类的窗口过程。这会是更优选的方法吗?我真的很惊讶我从未见过这个,因为我已经有数百个子类来源。
新方法:
WNDCLASS wc;
GetClassInfoEx(hInstance, "Edit", &wc);
wc.lpszClassName = L"NewEditClass";
Edit_OldProc = wc.lpfnWndProc;
wc.lpfnWndProc = EditWndProc
RegisterClassEx(&wc);
// Create the Edit Box
CreateWindowEx(.., "NewEditClass", ...);
// Then in EditWndProc(...):
return Edit_OldProc(hWnd, Message, lParam, wParam);