Вы можете просто выставить его в качестве IntPtr. Используйте NativeWindow.AssignHandle(), чтобы создать IWin32Window, который вам понадобится. ReleaseHandle(), когда вы закончите.
Это не помешает сделать его абсолютно безопасным, вы захотите узнать, когда родитель закрыт по какой-либо причине, и безопасность исключений является проблемой. Вдохновляя этот вспомогательный класс:
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
public class UnmanagedDialogParent : NativeWindow {
private Form dialog;
public DialogResult ShowDialog(IntPtr parent, Form dlg) {
if (!IsWindow(parent)) throw new ArgumentException("Parent is not a valid window");
dialog = dlg;
this.AssignHandle(parent);
DialogResult retval = DialogResult.Cancel;
try {
retval = dlg.ShowDialog(this);
}
finally {
this.ReleaseHandle();
}
return retval;
}
protected override void WndProc(ref Message m) {
if (m.Msg == WM_DESTROY) dialog.Close();
base.WndProc(ref m);
}
// Pinvoke:
private const int WM_DESTROY = 2;
[DllImport("user32.dll")]
private static extern bool IsWindow(IntPtr hWnd);
}
Непрошеным, должно быть близко.
- ваш проект C# для проекта Windows? или WPF? – Matt
его проект C#, который имеет окно wpf, которое я хочу показать – WAQ
Пожалуйста, прочитайте: WPF и Win32 Interoperation: http://msdn.microsoft.com/en-us/library/ms742522(v=vs.110).aspx – Matt