开发者

Create window as child in third party application

I'm trying to get my C# form to be parented correctly in a third party app, I have the开发者_Go百科 handle to the control that I would like my form parented to but just can't seem to get it to work.

alt text http://img693.imageshack.us/img693/8871/examplec.jpg

I would like to create my form so that it is part of the MDIClient, handle 005E0ED6. Just like Window 01D7157D.

Is this possible? If so can it be done in C#?


How have you tried doing it? Did you try SetParent? See the following StackOverflow question to see if it helps. Embedding HWND into external process using SetParent


This code seems to work:

    [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);


Good luck. I've gone down that road, and found that there's enough little irritating gotchas that I eventually gave up on it.

SetParent() and the like will get you part of the way there, but there's a bunch of little gotchas to watch as far as the overall system (message pump blocking etc.) that just make it a time sink.

With WinForms, especially, I'd highly recommend just running your UI in the main process (if you can), and if you want to isolate your processing in another process do that instead.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜