我正在继承本机窗口(组合框的编辑控件......)
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#中的继承无关。
答案 0 :(得分:2)
您将通过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都是相同的。
答案 1 :(得分:1)
您应该使用CallWindowProc来调用oldWndProc指针。
[DllImport("user32")]
private static extern int CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, int Msg, int wParam, int lParam);
答案 2 :(得分:0)
此site对您的所有互操作/ p调用工作非常有帮助(SetWindowLong)