我想实现的是,我的应用程序ex1.exe调用另一个应用程序ex2.exe,并能够把ex2.exe显示在我的子窗口中(SID 的view中),这两个应用程序需要满足什么条件?需要用到什么技术,能不能说的详细一点。

解决方案 »

  1.   

    你是说ex2的窗体在view内部吗?
    可以
      

  2.   

    条件是:ex2有自己的显示窗口并且有不被父窗口的特性,不能使用VB编程。
    方法:ex1加载ex2,然后检索ex2的窗口句柄。再设置ex2窗口的父窗口,即ex1的窗口。
      

  3.   

    我的意思就是想把另一个外部程序嵌入到ex1.exe。
     CPUIV(),能不能说的详细一点。我使用的工具是vc、mfc。什么叫“不被父窗口的特性”?
      

  4.   

    下面是一个例子,把写字板放到框架窗口。 你先建立一个单文档工程 myprj,然后编辑 BOOL CMyprjApp::InitInstance() 函数。找到下面两行:
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();在其后键入下面的代码: SetWindowLong(m_pMainWnd->m_hWnd, GWL_STYLE, GetWindowLong(m_pMainWnd->m_hWnd,GWL_STYLE)|WS_CLIPCHILDREN);
    HINSTANCE hp=ShellExecute(NULL,NULL,"notepad",NULL,"",SW_SHOWNORMAL);
    CWnd *pWnd=NULL;
    while(1) //一直到写字板窗体被建立
    {
            pWnd=CWnd::FindWindow("Notepad",NULL);
    if (pWnd) break;
    }
    pWnd->SetParent(m_pMainWnd);编译即可运行
      

  5.   

    CPUIV() 非常感谢你!我还想问一下,对于ex2.exe有什么要求吗?我调用自己写的一个ex2程序,但是不好用。
    代码如下:
    SetWindowLong(m_pViewContainer->m_hWnd, GWL_STYLE, GetWindowLong(m_pViewContainer->m_hWnd, GWL_STYLE)|WS_CLIPCHILDREN);
    HINSTANCE hp = ShellExecute(NULL, "open", 
    "E:\Client.exe", NULL, "", SW_MAXIMIZE);
    CWnd *pWnd = NULL; while(1) //一直到写字板窗体被建立
    {
            pWnd=CWnd::FindWindow("Notepad",NULL);
    if (pWnd) break;
    }
    pWnd->SetParent(m_pViewContainer);
      

  6.   

    你不能照搬,必须根据自己的情况修改:1  FindWindow() 函数参数,应该换成Client.exe 窗口的类名或窗口标题。
    2  ex2 与 ex1 的同步问题。SetParent()函数必须在ex2 的窗口建立以后执行(建议采用ex1延迟1
       秒后再执行SetParent)。
    3  ex1 的窗口必须是非模式窗体。
      

  7.   

    我试了,但是ex2并没有嵌入ex1中啊?ex2我做的是一个单文档的exe。不好意思,问了你这么多,感谢您了!