Embedding HWND into external process using SetParent

前端 未结 3 1857
一向
一向 2020-11-29 01:00

I\'m trying to embed a window from my process into the window of an external process using the SetParent function and have encountered a few problems that I

相关标签:
3条回答
  • 2020-11-29 01:41

    I am not sure if you are still interested in this topic after almost three years. I am working on a similar application. My solution is to modify the window style before you call SetParent. With this solution, I don't have to call AttachThreadInput.

    However, one major issue of hosting child windows from an external process is that if the external process hangs while responding to a user keyboard or mouse input, the main application also freezes. The message loop in the main application is still running. However, it no longer receives user input events. Therefore, it appears as if it is hanging. I believe that's the direct result of AttachThreadInput since the input events of the two threades are now synchronized. If one of them is blocked, both are blocked.

    0 讨论(0)
  • 2020-11-29 01:48

    Well, I finally found the answer to my question.

    To fix the issue with the main app losing focus you need to use the AttachThreadInput function to attach the embedded window thread to the main app thread.

    Also, one can use the TranslateAccelerator function in response to WM_KEYDOWN messages to ensure accelerator messages of the main app are triggered.

    0 讨论(0)
  • 2020-11-29 02:02

    I ran into the same issue, after reading MSDN doc carefully, I found it an easy fix.

    You should remove WS_POPUP and add WS_CHILD BEFORE you call setParent

    It's stated in MSDN:

    For compatibility reasons, SetParent does not modify the WS_CHILD or WS_POPUP window styles of the window whose parent is being changed. Therefore, if hWndNewParent is NULL, you should also clear the WS_CHILD bit and set the WS_POPUP style after calling SetParent. Conversely, if hWndNewParent is not NULL and the window was previously a child of the desktop, you should clear the WS_POPUP style and set the WS_CHILD style before calling SetParent.

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms633541(v=vs.85).aspx

    0 讨论(0)
提交回复
热议问题