C# 本机窗口当量

C# 本机窗口当量,c#,c++,wndproc,C#,C++,Wndproc,在c#中,我可以使用类在与执行代码相同的过程中“劫持”窗口的WndProc,使我能够覆盖某些消息并让其他消息通过 以下是一个例子: protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_ENABLE: //do default thing base.WndProc(ref m); //then do

c#
中,我可以使用类在与执行代码相同的过程中“劫持”窗口
WndProc
,使我能够覆盖某些消息并让其他消息通过

以下是一个例子:

protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case WM_ENABLE:
            //do default thing
            base.WndProc(ref m);
            //then do my thing
            break;
        case WM_PAINT:
            //don't even call base.WndProc, I'll handle painting.
            break;
        default:
            //all other messages...
            base.WndProc(ref m);
            break;
    }
}
如何在
c++Win32
应用程序中完成同样的事情?我甚至不知道从哪里开始,或者什么是正确的术语。< /P> < P>你可以在C++中使用回调来对任何代码> HWND < /C> > < /P>
有关完整的详细信息和选项(在WIndows API中有很多方法可以做到这一点),请参阅。最接近你的C#选项是。请注意,新的、改进的窗口子类化机制是使用。

我不知道这会有多大用处,但您可以尝试查看.NET反射器中的
NativeWindow
类,看看它在调用什么。它被称为“子类化”。佩佐德发誓,这早在NativeWindow出现之前就开始了。MSDN article.
base.WndProc
的等价物是您控制的窗口类中的
DefWindowProc
,以及子类窗口中的
CallWindowProc
。请看,现在有一个更新的“更安全”的子类化API:然后您使用
defsublassproc
。我知道是否会涉及
WindowProc
,但我不清楚的部分是如何将其与现有HWND关联。@Rotem为您添加了详细信息。谢谢!不知道要搜索的正确术语令人沮丧。这是一种古老而脆弱的子类化方法。也许一个指向的链接会更好。@BenVoigt很好的观点-不确定为什么MSDN没有在该页面中更新,但添加了一个链接。