程序改造,在线等待,分少继续加 现在有一个可以运行的地形漫游程序,可是它是一个小窗口程序(里面有一个WinMain()函数,不是MFC的),我需要把它嵌入到我的系统中,我的系统是MFC单文档的,上方有一行菜单,希望用户选择菜单之后才弹出原来的程序,望高手相助! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果不需要交互的话,可以用winexec来执行程序。 用CreateProcess()创建子进程也可以呀 WinMain()函数变成一个函数不就可以了吗.. 用CreateProcess()创建子进程是可以,可是那些代码并没有添加到我的工程中啊,怎么办? 原来的是单独的可以运行的程序啊,怎么添加到菜单的映射函数中?难道直接把winmain()函数添加到菜单的映射函数中吗? 地形漫游程序 return 0;mainfrm.showwindow(0);int k=winexec(地形漫游程序);if(k==0)//程序退出码{mainfrm.showwindow(1);};//程序是示意--但愿能给你一点提示! 我刚才把那些文件添加到工程中试了,不行的,有好几个错误。原来的程序不是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(); } 应该说原来的程序是用C写的WinAPI程序,不知怎样才能将其代码添加到MFC工程中?需要做哪些改动呢?谢谢! 我现在还是个才鸟,可能有些东西讲的不明白,我将代码放到下面的地址,如果有兴趣可以看看,能够帮助改造一下,小弟感激不尽,能够给小弟一些指点,亦很感谢!http://www.wxxf.net/upload/file/futuredream/67843dd88a2ca4bc22dd947baabfa26e_heightmap.rar 其实不需要那么麻烦,你只要按以下步骤进行就可以了: 1、启动 MFC 程序时运行 “地图漫游”程序。如果该程序已经启动,则不再次启动。 2、找到“地图漫游”程序的主窗口。 3、希望显示“地图漫游”程序的时候 ShowWindow (SW_SHOW),希望关闭的时候 ShowWindow (SW_HIDE)。 4、退出时关闭“地图漫游”程序。 可能用到的API有: ::FindWindow ::ShowWindow ::CloseWindow ::SendMessage ::WinExec 可是原来的程序可以单独运行的啊。楼上说的“ 1、启动 MFC 程序时运行 “地图漫游”程序。如果该程序已经启动,则不再次启动。”是何意思?在我的工程中如何运行“地形漫游”程序?难道启动它对应的线程?这样的话,原来的代码就加入不到我的工程中了。如果不是,那又是怎样做呢?望赐教! 在一个程序中运行另一个程序的办法很多,比如使用WinExec函数,CreateProcess函数等。 在一个程序中操作另外一个程序的方法也很多,最常见和容易的办法是: 1、使用::FindWindow函数找到目标程序的主窗口。 2、使用::ShowWindow显示或者隐藏目标程序的主窗口 3、使用::CloseWindow关闭(退出)目标程序 4、使用::SendMessage进行其他任何操作。 判断目标程序是否运行的办法也很多,这里介绍一个简单的办法,在上面(1)中如果找不到,则判断程序未运行,不过正规的办法是在进程列表中去找,这个办法要麻烦一点,就不在这里介绍了。 RE: 对了,那个“地形漫游”的程序还需要用户通过鼠标和键盘来操作,这样才能在其中行走。 使用 ::SendMessage 可以模拟鼠标和键盘,而且你可以用 SetFocus 将漫游程序的主窗口激活,以便使其接受键盘和鼠标消息。 使用 SetForegroundWindow 函数可以是窗口激活并显示在最上层,这比 SetFocus 好些。 VC中怎么实现将unicode转换为汉字,再写入某个txt文件中? 关于添加右键菜单 在OnTimer中keybd_event(功能键)为什么无效 小弟刚上班,老板出难题:投币器怎么和电脑相连.希望各位高手能出手相救... 怎样去接受activex dll的事件 如何判断对话框的edit框中是否有输入? 如何编程实现bmp到二进制的转换? 使窗口有效EnableWindow ADO中,如何得到一个表的大小?以便我能分配足够的内存来存放其内容? 关于主线程和其他线程在调用ocx中函数的问题,很急 整型怎么转为字符型??? 把分补上了~~
mainfrm.showwindow(0);
int k=winexec(地形漫游程序);if(k==0)//程序退出码
{
mainfrm.showwindow(1);
};//程序是示意--但愿能给你一点提示!
原来的程序不是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();
}
其实不需要那么麻烦,你只要按以下步骤进行就可以了: 1、启动 MFC 程序时运行 “地图漫游”程序。如果该程序已经启动,则不再次启动。
2、找到“地图漫游”程序的主窗口。
3、希望显示“地图漫游”程序的时候 ShowWindow (SW_SHOW),希望关闭的时候 ShowWindow (SW_HIDE)。
4、退出时关闭“地图漫游”程序。 可能用到的API有:
::FindWindow
::ShowWindow
::CloseWindow
::SendMessage
::WinExec
楼上说的“ 1、启动 MFC 程序时运行 “地图漫游”程序。如果该程序已经启动,则不再次启动。”是何意思?在我的工程中如何运行“地形漫游”程序?难道启动它对应的线程?这样的话,原来的代码就加入不到我的工程中了。如果不是,那又是怎样做呢?
望赐教!
在一个程序中运行另一个程序的办法很多,比如使用WinExec函数,CreateProcess函数等。 在一个程序中操作另外一个程序的方法也很多,最常见和容易的办法是:
1、使用::FindWindow函数找到目标程序的主窗口。
2、使用::ShowWindow显示或者隐藏目标程序的主窗口
3、使用::CloseWindow关闭(退出)目标程序
4、使用::SendMessage进行其他任何操作。 判断目标程序是否运行的办法也很多,这里介绍一个简单的办法,在上面(1)中如果找不到,则判断程序未运行,不过正规的办法是在进程列表中去找,这个办法要麻烦一点,就不在这里介绍了。
使用 SetForegroundWindow 函数可以是窗口激活并显示在最上层,这比 SetFocus 好些。