VC实现A进程窗口嵌入到B进程窗口中显示的方法

2025-05-27 0 49

本文通过一个Demo示例讲述把A应用程序嵌入到B应用程序中显示的方法。

主要代码如下:

?

1

2

3

4

5

6

7

8

9

10

11

12
//在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。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 VC实现A进程窗口嵌入到B进程窗口中显示的方法 https://www.kuaiidc.com/75850.html

相关文章

发表评论
暂无评论