2010-04-28 28 views
2

Je dois montrer mon System.Windows.Forms.Form en tant que fenêtre enfant d'un HWND C++ non géré. Ce code est le SDK C# qui récupère NativeWindow:Forme gérée en tant qu'enfant de HWND non géré

public static NativeWindow MainWindow() 
{ 
    Diagnostics.Process process = Diagnostics.Process.GetCurrentProcess(); 
    if (null == process) 
    return null; 
    IntPtr handle = process.MainWindowHandle; 
    if (IntPtr.Zero == handle) 
    return null; 

    NativeWindow wnd = new NativeWindow(); 
    wnd.AssignHandle(handle); 

    return wnd; 
} 

Voici comment il est mis en œuvre dans le plug-in:

IWin32Window rh_wnd = Rhino.RhinoApp.MainWindow(); 
DocEditor.Show(rh_wnd); 

Cela fonctionne .... la plupart du temps. Mais il échoue aussi souvent la première fois que j'appelle ce code:

HWND Error http://www.freeimagehosting.net/uploads/f29bc27823.png

Appelez à nouveau, tout fonctionne bien. Que se passe-t-il?!?

+0

Problèmes de pointeur .... –

Répondre

2

Peut-être parce que rh_wnd est nul? Il y a au moins 2 cas où vous retourneriez null depuis MainWindow(). Peut-être une bonne idée de vérifier

IWin32Window rh_wnd = Rhino.RhinoApp.MainWindow(); 
if (rh_wnd != null) 
    DocEditor.Show(rh_wnd); 

Et si les arrêts au-dessus des erreurs, vous pouvez vérifier que des conditions ci-dessus renvoie la valeur null, et aller de là.

Espérons que cela aide.