主  题:  我想在我自己的一个窗口中运行另一个程序怎么做? 
作  者:  opentuxedo (开缝的燕尾服)  
等  级:    
信 誉 值:  100 
所属论坛:  VC/MFC 界面 
问题点数:  200 
回复次数:  20 
发表时间:  2002-11-29 15:23:06 
   
 
   
我现在想在一个程序中调用另一个单文档界面的应用程序,我希望能把要运行的程序放在我的一个窗口中,谁知道怎么办,给出思路或例子都可以。
响应者每人先送100分。
  
 
 
 回复人: xiaoqingyu(小青鱼) ( ) 信誉:100  2002-11-29 15:35:00  得分:0 
 
 
  使用容器好像可以,先前看到过这样的例子,如果能找到,给你留地址!
  
 
Top 
 
 回复人: phiger(phiger) ( ) 信誉:100  2002-11-29 15:43:00  得分:0 
 
 
  It maybe help you!
http://expert.csdn.net/Expert/topic/1198/1198444.xml?temp=.6923029
  
 
Top 
 
 回复人: opentuxedo(开缝的燕尾服) ( ) 信誉:100  2002-11-29 15:48:00  得分:0 
 
 
  谢谢小青鱼,我会用OLE复合文档的界面整合来做,但这不是我希望的,因为我们的用户都特别傻,他们希望第二个程序嵌入进来后和单独运行的样子一模一样,只是位于第一个程序的一个窗口中。
  
 
Top 
 
 回复人: opentuxedo(开缝的燕尾服) ( ) 信誉:100  2002-11-29 16:10:00  得分:0 
 
 
  Hi,phiger.
Thanks for reply.I really like OLE technic very much.But our project forces me forget it.Our main application must launch many small GUI instances among which most are migrated from UNIX.So it is very hard to regard them as a COM object.
Thanx again and hope to hear ur further advice.
  
 
Top 
 
 回复人: zhenxizhou(追忆) ( ) 信誉:100  2002-11-29 19:56:00  得分:0 
 
 
  因为每个程序都有它自己的窗口资源,就如标准控件也是做为一个窗口存在,所以我认为你不用OLE的话恐怕难以实现。关注中......
  
 
Top 
 
 回复人: qrlvls(怜松) ( ) 信誉:100  2002-11-30 03:10:00  得分:0 
 
 
  难度大了,呵呵
如果这样的话,估计实现起来需要付出许多代价
能不能运行起来以后监控新进程的状态,然后再响应。
  
 
Top 
 
 回复人: virtualfunction(virtualfunction) ( ) 信誉:100  2002-11-30 03:31:00  得分:0 
 
 
  1.创建子进程,保留ID和HANDLE;
2.HOOK该子进程,并建立数据通讯方式(方法很多);
3.将父进程数据(显示区的位置信息)传给子进程;
4.在HOOK DLL中MoveWindow到指定位置;
5.当父进程界面发生改变时,重复3、4。
  
 
Top 
 
 回复人: gl_piaofan(piaofan) ( ) 信誉:100  2002-12-01 23:13:00  得分:0 
 
 
  如果你是运行dos程序的话,可以用spawn运行这个程序,然后把输入、输出都
重定向到某个pipe的读(写)据柄,注意将console的窗口隐藏。开启一个线程读写此pipe,然后把输出转到窗口去。不过使用窗口重定向输入的话,有点麻烦,因为你需要做一个编辑类,类似于console的输入,输出。  
 
Top 
 
 回复人: cbc(逍遥子) ( ) 信誉:100  2002-12-01 23:31:00  得分:0 
 
 
  gz
  
 
Top 
 
 回复人: zswzwy(对! 我就是被封杀的☆ZSWZWY☆!) ( ) 信誉:100  2002-12-02 12:30:00  得分:0 
 
 
  没找到源代码
  
 
Top 
 
 回复人: opentuxedo(开缝的燕尾服) ( ) 信誉:100  2002-12-03 09:39:00  得分:0 
 
 
  DOS程序我自己已经做好了,但是WINDOWS程序还是不会做。我现在正在按virtualfunction的方法去试,如果能做好每个人发一份。
另外还有谁有好的建议?快结帐了。
  
 
Top 
 
 回复人: qing_li73(bluemoon) ( ) 信誉:100  2002-12-06 10:59:00  得分:0 
 
 
  Just give u another different view: Run the SDI above the background pic (that's an image copy of ur real main application), at the same time, hide main application, when finish the SDI, restore  :) I'm not sure it's effective, FYI   
 
Top 
 
 回复人: opentuxedo(开缝的燕尾服) ( ) 信誉:100  2002-12-06 13:10:00  得分:0 
 
 
  Thanks qing_li73
Yes.I was trying what you mentioned.I just worked my programs like PCAnyWhere.Copy images to my own window and dispatch mouse event to child process.It works,but i still think there should be a easy way to accomplish this.
So i hope someone could give me some new advice.
  
 
Top 
 
 回复人: DaQiangZi(大强子) ( ) 信誉:100  2002-12-07 00:16:00  得分:0 
 
 
  这样试试:
首先FindWindow,得到那个程序主窗口的句柄,然后子类化它,去掉它的Title Bar, Status Bar, 然后resize你的主窗口,正好框住它,再然后move那个程序到你的主窗口的合适位置,看起来就像一个。通过子类化接管它的消息,通过它的句柄向它发命令,差不多可以实现你的目的吧。
  
 
Top 
 
 回复人: E17(冷盘) ( ) 信誉:100  2002-12-07 00:21:00  得分:0 
 
 
  同意 : DaQiangZi(大强子)  的想法
  
 
Top 
 
 回复人: opentuxedo(开缝的燕尾服) ( ) 信誉:100  2002-12-08 14:15:00  得分:0 
 
 
  谢谢DaQiangZi
  
 
Top 
 
 回复人: opentuxedo(开缝的燕尾服) ( ) 信誉:100  2002-12-08 14:16:00  得分:0 
 
 
  希望更多的人来关注这个问题。
  
 
Top 
 
 回复人: opentuxedo(开缝的燕尾服) ( ) 信誉:100  2002-12-09 12:51:00  得分:0 
 
 
  期待大侠们的关注
  
 
Top 
 
 回复人: Runn(椰子) ( ) 信誉:100  2002-12-09 16:05:00  得分:0 
 
 
  gz
  
 
Top 
 
 回复人: wj59(wj59) ( ) 信誉:100  2002-12-09 16:19:00  得分:0 
首先谢谢这些人的关注,希望有更多的人来参与讨论。另外怎样才能一下开一个1000分的帖子?