程序改造,在线等待,分少继续加

CGraphX 2005-05-27 09:33:17
现在有一个可以运行的地形漫游程序,可是它是一个小窗口程序(里面有一个WinMain()函数,不是MFC的),我需要把它嵌入到我的系统中,我的系统是MFC单文档的,上方有一行菜单,希望用户选择菜单之后才弹出原来的程序,望高手相助!
...全文
165 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdeee 2005-06-02
  • 打赏
  • 举报
回复

使用 SetForegroundWindow 函数可以是窗口激活并显示在最上层,这比 SetFocus 好些。
cdeee 2005-06-02
  • 打赏
  • 举报
回复
RE: 对了,那个“地形漫游”的程序还需要用户通过鼠标和键盘来操作,这样才能在其中行走。

使用 ::SendMessage 可以模拟鼠标和键盘,而且你可以用 SetFocus 将漫游程序的主窗口激活,以便使其接受键盘和鼠标消息。
cdeee 2005-06-02
  • 打赏
  • 举报
回复

在一个程序中运行另一个程序的办法很多,比如使用WinExec函数,CreateProcess函数等。

在一个程序中操作另外一个程序的方法也很多,最常见和容易的办法是:
1、使用::FindWindow函数找到目标程序的主窗口。
2、使用::ShowWindow显示或者隐藏目标程序的主窗口
3、使用::CloseWindow关闭(退出)目标程序
4、使用::SendMessage进行其他任何操作。

判断目标程序是否运行的办法也很多,这里介绍一个简单的办法,在上面(1)中如果找不到,则判断程序未运行,不过正规的办法是在进程列表中去找,这个办法要麻烦一点,就不在这里介绍了。
CGraphX 2005-05-31
  • 打赏
  • 举报
回复
对了,那个“地形漫游”的程序还需要用户通过鼠标和键盘来操作,这样才能在其中行走。
CGraphX 2005-05-31
  • 打赏
  • 举报
回复
可是原来的程序可以单独运行的啊。
楼上说的“ 1、启动 MFC 程序时运行 “地图漫游”程序。如果该程序已经启动,则不再次启动。”是何意思?在我的工程中如何运行“地形漫游”程序?难道启动它对应的线程?这样的话,原来的代码就加入不到我的工程中了。如果不是,那又是怎样做呢?
望赐教!
cdeee 2005-05-31
  • 打赏
  • 举报
回复

其实不需要那么麻烦,你只要按以下步骤进行就可以了:

1、启动 MFC 程序时运行 “地图漫游”程序。如果该程序已经启动,则不再次启动。
2、找到“地图漫游”程序的主窗口。
3、希望显示“地图漫游”程序的时候 ShowWindow (SW_SHOW),希望关闭的时候 ShowWindow (SW_HIDE)。
4、退出时关闭“地图漫游”程序。

可能用到的API有:
::FindWindow
::ShowWindow
::CloseWindow
::SendMessage
::WinExec
oyljerry 2005-05-30
  • 打赏
  • 举报
回复
添加到菜单的映射函数中
CGraphX 2005-05-30
  • 打赏
  • 举报
回复
我现在还是个才鸟,可能有些东西讲的不明白,我将代码放到下面的地址,如果有兴趣可以看看,能够帮助改造一下,小弟感激不尽,能够给小弟一些指点,亦很感谢!http://www.wxxf.net/upload/file/futuredream/67843dd88a2ca4bc22dd947baabfa26e_heightmap.rar
CGraphX 2005-05-30
  • 打赏
  • 举报
回复
应该说原来的程序是用C写的WinAPI程序,不知怎样才能将其代码添加到MFC工程中?需要做哪些改动呢?谢谢!
CGraphX 2005-05-30
  • 打赏
  • 举报
回复
我刚才把那些文件添加到工程中试了,不行的,有好几个错误。
原来的程序不是MFC的,WinMain()函数如下,其中有些语句是OpenGL函数库中的函数,不用管,和vc库函数差不多的。


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hprev, PSTR cmdline, int ishow)
{
HWND hWnd;

// 判断用户是否需要全屏显示
if(MessageBox(NULL, "Click Yes to go to full screen (Recommended)", "Options", MB_YESNO | MB_ICONQUESTION) == IDNO)
g_bFullScreen = false;

hWnd = CreateMyWindow(" 地形模拟 ", SCREEN_WIDTH, SCREEN_HEIGHT, 0, g_bFullScreen, hInstance);

if(hWnd == NULL) return true;

// 初始化OpenGL
Init(hWnd);
return MainLoop();
}
CGraphX 2005-05-30
  • 打赏
  • 举报
回复
用CreateProcess()创建子进程是可以,可是那些代码并没有添加到我的工程中啊,怎么办?
lwg0869 2005-05-30
  • 打赏
  • 举报
回复
加在菜单的COMMAND中!
lwg0869 2005-05-30
  • 打赏
  • 举报
回复
地形漫游程序 return 0;


mainfrm.showwindow(0);
int k=winexec(地形漫游程序);

if(k==0)//程序退出码
{
mainfrm.showwindow(1);
};

//程序是示意--但愿能给你一点提示!
CGraphX 2005-05-30
  • 打赏
  • 举报
回复
原来的是单独的可以运行的程序啊,怎么添加到菜单的映射函数中?难道直接把winmain()函数添加到菜单的映射函数中吗?
WhatCanIdoing 2005-05-27
  • 打赏
  • 举报
回复
WinMain()函数变成一个函数不就可以了吗..
cooljjyy 2005-05-27
  • 打赏
  • 举报
回复
用CreateProcess()创建子进程也可以呀
菲斯可儿 2005-05-27
  • 打赏
  • 举报
回复
如果不需要交互的话,可以用winexec来执行程序。
CGraphX 2005-05-27
  • 打赏
  • 举报
回复
算了,到此为止吧!
以后有时间自己再看...........

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧