【原创】A进程窗口嵌入到B进程窗口中显示
生活随笔
收集整理的這篇文章主要介紹了
【原创】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);
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
總結
以上是生活随笔為你收集整理的【原创】A进程窗口嵌入到B进程窗口中显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NeatUpload的安装使用
- 下一篇: delphi 执行一个外部程序,当外部程