【发布时间】:2008-10-21 21:19:56
【问题描述】:
我一直在阅读关于子类化的MSDN 文档,并且我已经成功地处理了子类中的事件
我的问题是将消息传递回原始 WndProc。
例如,如果我有一个窗口,带有一个子类 groupbox 控件和一个按钮作为该 groupbox 的子项,我想在原始窗口过程中处理按钮事件,而不是子类 groupbox 过程。
本质上,我想要一个空的子类过程:
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 的工作方式。
【问题讨论】:
标签: c user-interface winapi