c# - 在 C# 中,我有一个指向 WIN32 WndProc 的 IntPtr。调用它的语法是什么?

标签 c# .net winapi

我正在对 native 窗口进行子类化(组合框的编辑控件...)

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# 中的继承无关。

最佳答案

您将调用CallWindowProc通过 P/调用。只需将参数定义为 int 变量(因为看起来这就是您在 SetWindowLong 调用中定义它们的方式),因此如下所示:

[DllImport("CallWindowProc"...] 公共(public)静态 extern int CallWindowProc(int previousProc, int nativeControlHandle, int msg, int lParam, int wParam);

请记住,对于编码(marshal)处理,int、uint 和 IntPtr 都是相同的。

关于c# - 在 C# 中,我有一个指向 WIN32 WndProc 的 IntPtr。调用它的语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/200924/

相关文章:

c++ - 调用 MoveWindow 后 CComboBox 自动选择文本

c# - 如何以及在何处为简单 XAML 窗口中的转换器创建 StaticResource 键?

c# - 我应该如何将我的商业模式与我的观点联系起来?

.net - 有可靠的.NET 图像元数据库吗?

c# - 如何通过工作组连接到 MSMQ?

c++ - 当我使用 win32 SendMessage 发送和转换标准字符串时,我得到了奇怪的字符

c# - 如何从字符串表示中获取泛型类型?

c# - 如何在 ASP.Net Core MVC 模型中使用 C# 解析来自 REST API 的 json 数据并将其显示在 HTML 页面上

.net - 您认为 ASP.NET WebForms 是一种不好的做法吗?

c++ - 当窗口关闭时,我的析构函数会被调用吗?