【原创】A进程窗口嵌入到B进程窗口中显示

做了一个把A应用程序嵌入到B应用程序中显示的Demo,源码:
// 在B应用启动时创建A进程
CreateProcess(_T( " A.exe " ),NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,NULL,NULL);
Sleep(
30 );
HWND hWndChild 
=  FindWindow(_T( " AAA " ),_T( " AAA " ));
while ( ! hWndChild)
{
    hWndChild 
=  FindWindow(_T( " AAA " ),_T( " AAA " ));
}
// 移动A进程窗口位置
MoveWindow(hWndChild, 80 , 20 , 240 , 320 ,TRUE);

// A进程窗口嵌入B进程窗口中
SetParent(hWndChild,hWnd);

 

An application can use the SetParent function to set the parent window of a pop-up, overlapped, or child window. The new parent window and the child window must belong to the same application。这是从msdn里面对SetParent的使用描述,说SetParent要嵌入的窗口必须和被嵌入的窗口属于同一个应用程序,其实不然,不过SetParent返回的确实是一个Null,这是因为A进程中的窗口并不存在父窗口,而SetParent调用后会返回父窗口的句柄,故返回Null。但是却不会影响A进程窗口嵌入。
在B进程窗口显示时收到的WM_ACTIVE中先会收到WA_ACTIVE或者WA_CLICKACTIVE,然后也会收到WA_INACTIVE参数,也就是说在某个时候,B进程没有被置为最前窗口,我想应该是当调用SetParent时,影响了B进程窗口。如果你希望B进程窗口收到WM_ACTIVE消息,必须调用SetForegroundWindow(hWnd),如果当前窗口不是最前窗口时,退出或者最小化时不会收到WM_ACTIVE消息中的WA_INACTIVE。尤其做嵌套应用程序的代码中,紧紧记着。
除此以外,当使用SetParent(hWndChild,hWnd)把A进程到B进程窗口中时,这时使用FindWindow查询到A进程的窗口句柄为null。

转载于:https://www.cnblogs.com/IamEasy_Man/archive/2009/12/11/1621953.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值