**
MFC实现将进程附加到另一个进程
**
用SetWindowLong函数将进程A改为进程B的子窗体
这里用记事本当做子窗体
void CcsdnDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
HWND hwnd = ::FindWindow(_T("Notepad"), NULL);
::SetWindowLong(hwnd, GWL_HWNDPARENT, (long)this->m_hWnd);
}
还可以通过父窗体WM_WINDOWPOSCHANGED事件得到父窗体大小位置结构体,再用SetWindowPos函数控制子窗体大小位置,实现两个窗体的粘连。
全局变量取到大小位置
void CcsdnDlg::OnWindowPosChanged(WINDOWPOS* lpwndpos)
{
CDialogEx::OnWindowPosChanged(lpwndpos);
x = lpwndpos->x;
y = lpwndpos->y;
cx = lpwndpos->cx;
cy = lpwndpos->cy;
}
调用父窗体WM_MOVING事件
void CcsdnDlg::OnMoving(UINT fwSide, LPRECT pRect)
{
CDialogEx::OnMoving(fwSide, pRect);
HWND hwnd = ::FindWindow(_T("Notepad"), NULL);
//控制窗口位置大小
::SetWindowPos(hwnd, HWND_NOTOPMOST, x + 20, y + 20, 200, 200, SWP_SHOWWINDOW | SWP_NOZORDER);
}
这样子窗体也会跟着父窗体动了