我已经使用SetWindowSubclass()对窗口进行了子类化,并且成功调用了消息处理程序,但是当我调用DefWindowProc()传递消息进行原始处理时,没有消息通过!
我们正在编写Marmalade(用于跨平台移动开发的套件)的扩展。它允许特定平台的本机扩展,我们正在为Windows桌面构建编写一个。我们没有直接访问消息循环的权限,但是可以自己子类化处理消息,但是我们似乎无法将消息传递回Marmalade进行常规处理。
例如,即使在回调中什么也不做,只不过调用DefWindowProc()仍然不起作用:
// Initialization:
const UINT_PTR gSubClassId = NULL;
DWORD_PTR subClassCBData = NULL;
SetWindowSubclass(gMainWindow, CadUtil_WindowCB, gSubClassId, subClassCBData);
...
// Message processing callback.
static LRESULT CALLBACK CadUtil_WindowCB(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
// Messages are correctly diverted here, but DefWindowProc() below isn't passing them on.
return DefWindowProc(hWnd, message, wParam, lParam);
}
知道如何发生吗?
谢谢,
罗伯。
我仍然不知道为什么子类无法正常工作,但是我可以通过使用钩子来解决它。因此,我现在不再使用SetWindowSubclass()来捕获消息并通过DefWindowProc()来传递消息,而是现在将SetWindowsHookEx()与WH_CALLWNDPROC和WH_GETMESSAGE一起使用来捕获消息,并在钩子中调用CallNextHookEx()来使消息通过。这适用于子类无法实现的地方。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句