[英]In C#, I have a IntPtr to a WIN32 WndProc. What is the syntax for calling it?
我正在继承本机窗口(组合框的编辑控件......)
oldWndProc = SetWindowLong(HandleOfCbEditControl, GWL_WNDPROC, newWndProc);
在我的 wndproc 子类中,我会有这样的代码,对,但我无法弄清楚调用 oldWndProc 的语法。
int MyWndProc(int Msg, int wParam, int lParam)
{
if (Msg.m == something I'm interested in...)
{
return something special
}
else
{
return result of call to oldWndProc <<<< What does this look like?***
}
}
编辑:这个问题中的“子类化”一词是指 WIN32 API 的含义,而不是 C#。 这里的子类化并不意味着覆盖 .NET 基类行为。 这意味着告诉 WIN32 调用您的函数指针而不是 Windows 当前回调。 它与 C# 中的继承无关。
您将通过 P/Invoke 调用CallWindowProc 。 只需将参数定义为 int 变量(因为它看起来就像你在 SetWindowLong 调用中定义它们的方式),所以是这样的:
[DllImport("CallWindowProc"...] public static extern int CallWindowProc(int previousProc, int nativeControlHandle, int msg, int lParam, int wParam);
请记住,对于编组,int、uint 和 IntPtr 都是相同的。
您应该使用 CallWindowProc 来调用该 oldWndProc 指针。
[DllImport("user32")]
private static extern int CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, int Msg, int wParam, int lParam);
该站点将对您所有的互操作/p-invoke 工作( SetWindowLong )非常有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.