I am reading two questions: first a third-party 'application' that accepts MFC windows from callers; and second, how to display an MFC window in a .NET form.
The first problem is a bit of trouble since your code is managed but the application will only accept an MFC window. If it must be an MFC window (say a CWnd derived object), then you'll need to write a native MFC DLL that creates an MFC window (warning: this DLL will may have to use the same version of MFC the third-party software uses). Your managed code can call your native code to create and return the MFC window and then opaquely pass the MFC window by passing its CWnd pointer to the 3rd-party software. If the third-party software only requires an HWND, you may be able to get away with creating a simple managed control. Grab managed control's HWND from the Handle property and pass that to the 3rd-party software.
The second problem is less trouble. Let's say the third-party software returns an HWND. You can easily use the NativeWindow class to 'attach' to the HWND using the AssignHandle method. If the third-party software returns a CWnd derived pointer, you'll again need unmanaged code to get the HWND from the CWnd before 'attaching' with the NativeWindow object.
This was first published in March 2004