将记事本notepad.exe嵌入到mfc的picturecontrol控件中

实现打开外部程序的函数
//program程序路径 args程序参数
HANDLE StartProcess(LPCTSTR program, LPCTSTR args)
{
HANDLE hProcess = NULL;
PROCESS_INFORMATION processInfo;
STARTUPINFO startupInfo;
::ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
if(::CreateProcess(program, (LPTSTR)args,
NULL, // process security
NULL, // thread security
FALSE, // no inheritance
0, // no startup flags
NULL, // no special environment
NULL, // default startup directory
&startupInfo,
&processInfo))
return hProcess;
}
将记事本程序嵌入到mfc图片控件中去
HANDLE handle=StartProcess(L"C:\\Windows\\notepad.exe",L"");
UpdateData(TRUE);
HWND hwnd = NULL;
CRect rc;
GetDlgItem(IDC_PIC1)->GetWindowRect(&rc);
int nWidth = rc.Width();
int nHeight = rc.Height();
ScreenToClient(rc);
while(!hwnd)
{
hwnd =::FindWindow(L"Notepad",L"无标题 - 记事本");
}
if( hwnd)
{
//设置窗口属性
LONG style=GetWindowLong(hwnd,GWL_STYLE);// 14CF 0000
style &=~WS_CAPTION;
style &=~WS_THICKFRAME;
//style |=WS_CHILD;
SetWindowLong(hwnd,GWL_STYLE,style);
//设置父窗口
::SetParent(hwnd,this->m_hWnd);
//::MoveWindow(hwnd, rc.left, rc.top, nWidth, nHeight, true); //将外部程序移到自自身窗口里
::SetWindowPos(hwnd,HWND_TOP, rc.left, rc.top, nWidth, nHeight, SWP_SHOWWINDOW |SWP_HIDEWINDOW );
// ::BringWindowToTop(hwnd);
//Invalidate();
//::UpdateWindow(hwnd);
::ShowWindow(hwnd,SW_SHOW);
}
对于findwindow函数,他会根据窗口名字找到窗口句柄,第一个参数是窗口的类,一般可以省略不写,第二个参数是窗口名称。通过vs的工具,spy++,窗口搜索功能可以找到窗口的信息

实现效果
