0

我正在研究一个 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);
4

0 回答 0