Bo,

Thanks for sharing your code.

I will try and give some feedback.

Any thoughts regarding the initial approach? Is there any reason for you not 
having followed that path?

Regards,

Nuno

> On 03 Jun 2015, at 11:15, Bo Thorsen <[email protected]> wrote:
> 
> Hi Nuno,
> 
> Den 03-06-2015 kl. 11:59 skrev Nuno Santos:
>> Is it possible that you can provide further details about this technic?
> 
> Sure. I have the following code to do this:
> 
>    void updateGeometry() {
>        // Get the current window size
>        RECT windowRect;
>        GetWindowRect(mWindowID, &windowRect);
>        setPosition(QPoint(windowRect.left, windowRect.top));
>        setSize(QSize(windowRect.right - windowRect.left + 1, 
> windowRect.bottom - windowRect.top + 1));
>    }
> 
>    bool registerOverlayWidget(QWidget* widget) {
>        SetLastError(0);
>        const HWND oldHWND = parentHWND(widget);
>        qDebug() << "old hwnd" << oldHWND;
>        if (SetWindowLongPtr ((HWND)widget->winId(), GWLP_HWNDPARENT, 
> (LONG_PTR) mWindowID) == 0 && GetLastError() != 0) {
>            // This is unreliable. Don't know why
>            //qDebug() << "SetWindowLongPtr failed" << ::getLastError();
>        }
> 
>        // Make sure the window has the proper size
>        updateGeometry();
> 
>        const HWND newHWND = parentHWND(widget);
>        qDebug() << "new hwnd" << newHWND;
> 
>        return newHWND != oldHWND;
>    }
> 
> The place that does the swallow into the window of the other application is 
> the SetWindowLongPtr() call. The mWindowID is the HWND of the window that you 
> want to swallow into.
> 
> You have to set windows hooks to get updates on geometry changes in the 
> parent window and resize the qwidget yourself. You should of course also 
> listen to destroyed events.
> 
>> Do you think this technic will also be possible on Mac?
> 
> Definitely not this code. It's Windows specific. I don't know if there is a 
> way to do the same on mac with another piece of code. My project is windows 
> only for now. If you do figure this out, I'd love to hear about it, though.
> 
>> My window content will be Qml. Initially my approach was starting a
>> QQmlApplicationEngine.
>> 
>> Now, I was considering using a QWidget to takeover the give pointer
>> window and instantiate a QDeclarativeView inside of it in order to have
>> Qml inside the QWidget.
>> 
>> With your suggestion, I believe you are getting the window id from the
>> already created QWidget or QQmlApplicationEngine. My question is how do
>> you get the window pointer from an already instantiated Qt window in
>> order to try this approach?
> 
> I actually use whatever HWND is given to this. It can be a Qt window or any 
> native Windows window.
> 
>>> On 03 Jun 2015, at 10:48, Bo Thorsen <[email protected] 
>>> <mailto:[email protected]>
>>> <mailto:[email protected] <mailto:[email protected]>>> wrote:
>>> 
>>> Den 03-06-2015 kl. 08:56 skrev Nuno Santos:
>>>> When we start a new QGuiApplication, it handles the Window creation
>>>> on each platform.
>>>> 
>>>> Now imagine that someone would give us a window ref and we wanted to
>>>> put our Qt application running on it.
>>>> 
>>>> Is this possible?
>>>> 
>>>> I’m building a plugin for an host program that provides the window
>>>> for the plugin to be shown, but Qt already opens an window.
>>>> 
>>>> Apparently it is not possible to control if that window is provide or
>>>> not. It seems to be always provided.
>>> 
>>> In one of my projects I use the Windows setParent() function to inject
>>> my window over the other applications native window. My window is a
>>> transparent overlay over the other window. Works perfectly.
>>> 
>>> Bo Thorsen,
>>> Director, Viking Software.
>>> 
>>> --
>>> Viking Software
>>> Qt and C++ developers for hire
>>> http://www.vikingsoft.eu
>>> _______________________________________________
>>> Interest mailing list
>>> [email protected]
>>> http://lists.qt-project.org/mailman/listinfo/interest
>> 
> 
> Bo Thorsen,
> Director, Viking Software.
> 
> -- 
> Viking Software
> Qt and C++ developers for hire
> http://www.vikingsoft.eu <http://www.vikingsoft.eu/>
_______________________________________________
Interest mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to