MFC将其他EXE镶入对话框中的问题·高手请解答
HANDLE hProcess;
HWND apphWnd = NULL;int CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
DWORD pID;
DWORD tpID = GetWindowThreadProcessId(hwnd,&pID);
if(tpID == (DWORD)lParam)
{
apphWnd = hwnd;
return false;
}
return true;
}
HANDLE StartProcess(LPCTSTR program, LPCTSTR args)
{
HANDLE hPro = NULL;
PROCESS_INFORMATION processInfo;
STARTUPINFO startupInfo;
::ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
//设置进程创建时不显示窗口
//startupInfo.dwFlags = /*STARTF_USEPOSITION*/STARTF_USESHOWWINDOW;
startupInfo.dwFlags = STARTF_USEPOSITION;//STARTF_USESHOWWINDOW;
startupInfo.dwX = 600;
startupInfo.dwY = 900;
startupInfo.wShowWindow = SW_HIDE;
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))
{
//延迟0.5s,等待进程创建成功
Sleep(500);
while(true)
{
::EnumWindows(&EnumWindowsProc, processInfo.dwThreadId);//Iterate all windows
if(NULL != apphWnd)
break;
}
hPro = processInfo.hProcess;
}
return hPro;
}
if(apphWnd != NULL)
{
OnQuit();
}
CRect rect;
GetClientRect(&rect);//get our dialog size into rect
hProcess=StartProcess("我的工具.exe","");//Start ms paint
if(apphWnd!=NULL)//check for window handle
{
::SetParent(apphWnd,m_hWnd);//set parent of ms paint to our dialog.
SetWindowLong(apphWnd, GWL_STYLE, WS_VISIBLE);//eraze title of ms paint window.
//Positioning ms paint.
::MoveWindow(apphWnd, rect.left, rect.top,rect.right, rect.bottom, true);
//窗口重绘,(因创建exe时,设置为SW_HIDE,导致exe窗口会被父窗口覆盖一部分)
Invalidate();
::UpdateWindow(apphWnd);
::ShowWindow(apphWnd,SW_SHOW);
}
else
MessageBox("Cannot find Window");
OnQuit()
{
TerminateProcess(hProcess,0);
apphWnd = NULL;
}
运行后第一个画面没有问题 已经镶入进去 如下图

但程序正式启动后 就变了,位置不对

跑到最下面去了
请问怎么解决
...全文
相关推荐
MFC中exe图标修改的方法
代码如下:m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1); SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon; 修改可运行程序的启动图标通过修改resource.h对应的加载图标的ID为最小来实现; 修改关于对话框的图标可通过覆盖工程中res文件夹下的项目名.ico图标来实现. 您可能感兴趣的文章:MFC中动态创建控件以及事件响应实现方法MFC创建模态对话框和非模态对话框的方法MFC设置对
\VC6.0中MFC生成.exe安装包步骤.
VC6.0中将MFC编写好的exe文件打包成安装包,步骤详细,有截图和详细的说明,希望对大家有帮助!
MFC 内嵌第三方Exe程序 VC2010
在VC程序里如何调用第三程序并内嵌到自己的窗口里做为子窗口,本程序给出一个很好的例子
MFC读取资源中的文本及二进制内容 文件打包进exe文件
把文件资源打包进MFC的exe文件中,运行时进行加载,然后读取文件中的文本内容或者二进制内容 内含应用例程:1.把一个对象存为二进制文件,加载文件后恢复原对象 2.生成文本,加载资源中的文本文件,获取文本中的字符串
MFC内嵌第三方EXE窗口
VS2010,多Tab窗口,内嵌第三方exe记事本(NotePad.exe),其中解决了刷新、移动等问题。


