Hallo,
das war mir schon bei deinem anderen Beitrag dazu aufgefallen: das ist kein gutes Design mit der statischen Methode 
MainClass.WndProc, da sich die beiden Klassen gegenseitig referenzieren.
Ich würde ein Event (bzw. Delegat) in 
WndClass deklarieren und mittels der 
MainClass daran binden (und diese kann dann wiederum eine virtuelle Methode aufrufen).
Hier (in Kürze) der Code dazu:
												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 
 | public class MainClass{
 public MainClass()
 {
 _wndClass = new WndClass();
 _wndClass.OnWndProc = OnWndProc;
 }
 
 protected void OnWndProc(ref Message m)
 {
 WndProc(ref m);
 }
 
 protected virtual void WndProc(ref Message m)
 {
 }
 }
 
 class WndClass : NativeWindow
 {
 public delegate void WndProcDelegate(ref Message m);
 
 public WndProcDelegate OnWndProc;
 
 protected override void WndProc(ref Message m)
 {
 OnWndProc?.Invoke(ref m);
 
 base.WndProc(ref m);
 }
 }
 | 
		
	  
(falls dir 
?. nichts sagt, dies ist ab 
C# 6 möglich: Null-Conditional Operator - ansonsten einfach wie in deinen bisherigen 
OnDo...-Methoden aufrufen)
Und die 
MainClass-Ereignisse dann nicht-statisch deklarieren.