Odd Problem with SetParent

M

Matt

Hello to all,
I'm having something of a problem with the WinAPI call SetParent.
Here's the scenario.
I am trying to take an existing program, and run it within my own
window. I can make this
happen, the code looks like this:

/ Remove border and whatnot
long style = GetWindowLong(appWin, GWL_STYLE);
long new_style = WS_CHILD | WS_VISIBLE;
SetWindowLong(appWin, GWL_STYLE, new_style);

// Put it into this form
SetParent(appWin, this.panel1.Handle);


// Move the window to overlay it on this window
MoveWindow(appWin, 0, 0, this.Width, this.Height, true);
SendMessage((int)m_appWin, WM_PAINT, 0, "");

Where appWin is the handle to the main window of the program I start
with Process.Start and
Handle is the handle of the control I want to "reparent" the window
within. It works fine, the
application is "relocated" within my window. However...

For Itunes (which is the program I'm trying to reparent), I can launch
it, reparent it, and have
it display itself properly. However, once I do, it no longer receives
any mouse clicks. It doesn't
even act as if the mouse is getting to that window. I've checked to
see if the mouse clicks are
going to MY window handle, but they are not.

Any ideas?

Thanks
Matt
 
M

Matt

[...]
For Itunes (which is the program I'm trying to reparent), I can launch
it, reparent it, and have
it display itself properly. However, once I do, it no longer receives
any mouse clicks. It doesn't
even act as if the mouse is getting to that window. I've checked to
see if the mouse clicks are
going to MY window handle, but they are not.
Any ideas?

Well, my first idea is that unless doing the exact same thing in an  
unmanaged application works, but doesn't in your .NET application, this is 
the wrong newsgroup for advice.  I suspect that there's really nothing  
about the question that relates to C# or .NET, and you'll get much better  
advice posting to a newsgroup that is actually topical for the question.

Pete

Fair enough, I'm open to suggestions. What newsgroup would that be?

Matt
 
I

Ignacio Machin ( .NET/ C# MVP )

Hello to all,
   I'm having something of a problem with the WinAPI call SetParent.
Here's the scenario.
I am trying to take an existing program, and run it within my own
window. I can make this
happen, the code looks like this:

           / Remove border and whatnot
            long style = GetWindowLong(appWin, GWL_STYLE);
            long new_style = WS_CHILD | WS_VISIBLE;
            SetWindowLong(appWin, GWL_STYLE, new_style);

            // Put it into this form
            SetParent(appWin, this.panel1.Handle);

            // Move the window to overlay it on this window
            MoveWindow(appWin, 0, 0, this.Width, this.Height, true);
            SendMessage((int)m_appWin, WM_PAINT, 0, "");

Where you got that code from?
I dnot think that you can do what you want (I might be wrong though).
Each program will have their own message pump and I don't know how you
are going to transfer the emsage from one to the other.
 
M

Matt

Where you got that code from?

I wrote it :)
I dnot think that you can do what you want (I might be wrong though).

Well, I've figured out a couple of ways to do most of this, I still
have some issues.
Each program will have their own message pump and I don't know how you
are going to transfer the emsage from one to the other.

The message pump really shouldn't matter. Clicks within the child
window should
be handled by it. At least I'd think so.

Matt
 
D

Doug Forster

Hi Matt,

Of course it matters. Its message pump is not only on a different thread but
in a different process. We could speculate for example that the 'child'
thread attempts to route its messages to the outer frame window or some
other one of yours and then attempts to call its WindowProc. But this is in
a different process so different address space so the Window proc address is
garbage to the 'child'. So maybe it gets an exception and swallows the
message. Who knows really, but I'd be surprised if you could get this to
work.

Cheers
Doug Forster
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top