Создать окно как дочернее в стороннем приложении
Я пытаюсь, чтобы моя форма C# была правильно добавлена в стороннее приложение, у меня есть дескриптор элемента управления, к которому я хотел бы добавить форму, но просто не могу заставить его работать.
http://img693.imageshack.us/img693/8871/examplec.jpg
Я хотел бы создать свою форму так, чтобы она была частью MDIClient, обрабатывать 005E0ED6. Так же, как окно 01D7157D.
Это возможно? Если так, то можно ли это сделать в C#?
3 ответа
Как ты пытался это сделать? Вы пробовали SetParent? Посмотрите следующий вопрос Stackru, чтобы увидеть, помогает ли это. Встраивание HWND во внешний процесс с использованием SetParent
Этот код, кажется, работает:
[DllImport("user32.dll")]
private static extern
IntPtr GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
[DllImport("user32.dll")]
private static extern
IntPtr AttachThreadInput(IntPtr idAttach, IntPtr idAttachTo, int fAttach);
WinAPI.SetParent(this.Handle, otherappshandle);
IntPtr otherprocessID = GetWindowThreadProcessId(otherappshandle, new IntPtr(0));
IntPtr threadID = new IntPtr(AppDomain.GetCurrentThreadId());
AttachThreadInput(threadID , otherprocessID , 1);
Удачи. Я пошел по этому пути и обнаружил, что есть достаточно мало раздражающих ошибок, которые я в конце концов бросил.
SetParent () и тому подобное помогут вам пройти часть пути, но есть куча маленьких ошибок, которые нужно посмотреть, насколько общая система (блокировка рассылки сообщений и т. Д.) Просто затрачивает время.
Особенно с WinForms, я настоятельно рекомендую просто запустить ваш пользовательский интерфейс в основном процессе (если вы можете), и если вы хотите изолировать свою обработку в другом процессе, сделайте это вместо этого.