Say you have a dynamic library and you want to treat a native window message inside any non-visual class in that library.
Derive this class from NativeWindow as shown below. After creating the new class from Class1, you can pass the Handle (like IntPtr) of this class to any native function.
public class Class1: NativeWindow
CreateParams cp = new CreateParams();
// Create the actual window
protected override void WndProc(ref Message m)
if(m.Msg == WM_...)
// Do something here in response to messages