我一直在阅读有关子类化的MSDN文档,我已成功处理子类中的事件
我的问题是将消息传递回原始的WndProc.
例如,如果我有一个窗口,具有子类别组框控件和一个按钮作为该组框的子项,我想处理原始窗口过程中的按钮事件,而不是子类化的组框过程.
基本上,我想要一个空的子类过程:
LRESULT FAR PASCAL SubClassFunc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return CallWindowProc(oldProc, hwnd, uMsg, wParam, lParam); }
oldProc的位置是:
FARPROC oldProc = (FARPROC)SetClassLong(group_box, GCL_WDPROC, (DWORD)SubCLassFunc);
窗口和组框和按钮的位置是:
HWND window = CreateWindowEx( WS_EX_WINDOWEDGE, appname, TEXT("Subclass Test"), WS_VISIBLE |WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 400, NULL, NULL, hInstance, 0); HWND group_box = CreateWindowEx( 0, TEXT("BUTTON"), TEXT("Group Box"), WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 8, 8, 275, 350, window, NULL, hInstance, 0); HWND push_button = CreateWindowEx( 0, TEXT("BUTTON"), TEXT("Push Button"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_VCENTER, 50, 100, 100, 25, group_box, (HMENU)PUSH_BUTTON, hInstance, 0);
我可以处理SubClassFunc中的按钮事件,但我想要做的是将它们传递回窗口WndProc.似乎CallWindowProc没有这样做,或者我对CallWindowProc的工作方式可能完全错误.