Управляемая форма как дитя неуправляемого HWND - PullRequest
2 голосов
/ 29 апреля 2010

Мне нужно показать мой System.Windows.Forms.Form как дочернее окно неуправляемого C ++ HWND. Это код C # SDK, который возвращает NativeWindow:

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;
}

Вот как это реализовано в плагине:

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

Это работает .... большую часть времени. Но это также часто дает сбой при первом вызове этого кода:

Ошибка HWND http://www.freeimagehosting.net/uploads/f29bc27823.png

Позвони еще раз, все работает нормально. Что происходит?!?

1 Ответ

2 голосов
/ 09 марта 2011

Возможно, потому что rh_wnd равен нулю? Есть как минимум 2 случая, когда вы возвращали бы null из MainWindow (). Хорошая идея проверить

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

И если вышеуказанное останавливает ошибки, вы можете проверить, какое из вышеприведенных условий возвращает ноль, и перейти оттуда.

Надеюсь, это поможет.

...