现在有一个可以运行的地形漫游程序,可是它是一个小窗口程序(里面有一个WinMain()函数,不是MFC的),我需要把它嵌入到我的系统中,我的系统是MFC单文档的,上方有一行菜单,希望用户选择菜单之后才弹出原来的程序,望高手相助!

解决方案 »

  1.   

    如果不需要交互的话,可以用winexec来执行程序。
      

  2.   

    用CreateProcess()创建子进程也可以呀
      

  3.   

    WinMain()函数变成一个函数不就可以了吗..
      

  4.   

    用CreateProcess()创建子进程是可以,可是那些代码并没有添加到我的工程中啊,怎么办?
      

  5.   

    原来的是单独的可以运行的程序啊,怎么添加到菜单的映射函数中?难道直接把winmain()函数添加到菜单的映射函数中吗?
      

  6.   

    地形漫游程序 return 0;
    mainfrm.showwindow(0);
    int k=winexec(地形漫游程序);if(k==0)//程序退出码
    {
    mainfrm.showwindow(1);
    };//程序是示意--但愿能给你一点提示!
      

  7.   

    我刚才把那些文件添加到工程中试了,不行的,有好几个错误。
    原来的程序不是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();
    }
      

  8.   

    应该说原来的程序是用C写的WinAPI程序,不知怎样才能将其代码添加到MFC工程中?需要做哪些改动呢?谢谢!
      

  9.   

    我现在还是个才鸟,可能有些东西讲的不明白,我将代码放到下面的地址,如果有兴趣可以看看,能够帮助改造一下,小弟感激不尽,能够给小弟一些指点,亦很感谢!http://www.wxxf.net/upload/file/futuredream/67843dd88a2ca4bc22dd947baabfa26e_heightmap.rar
      

  10.   


        其实不需要那么麻烦,你只要按以下步骤进行就可以了:    1、启动 MFC 程序时运行 “地图漫游”程序。如果该程序已经启动,则不再次启动。
        2、找到“地图漫游”程序的主窗口。
        3、希望显示“地图漫游”程序的时候 ShowWindow (SW_SHOW),希望关闭的时候 ShowWindow (SW_HIDE)。
        4、退出时关闭“地图漫游”程序。    可能用到的API有:
    ::FindWindow
    ::ShowWindow
    ::CloseWindow
    ::SendMessage
    ::WinExec
      

  11.   

    可是原来的程序可以单独运行的啊。
    楼上说的“ 1、启动 MFC 程序时运行 “地图漫游”程序。如果该程序已经启动,则不再次启动。”是何意思?在我的工程中如何运行“地形漫游”程序?难道启动它对应的线程?这样的话,原来的代码就加入不到我的工程中了。如果不是,那又是怎样做呢?
    望赐教!
      

  12.   


        在一个程序中运行另一个程序的办法很多,比如使用WinExec函数,CreateProcess函数等。    在一个程序中操作另外一个程序的方法也很多,最常见和容易的办法是:
    1、使用::FindWindow函数找到目标程序的主窗口。
    2、使用::ShowWindow显示或者隐藏目标程序的主窗口
    3、使用::CloseWindow关闭(退出)目标程序
    4、使用::SendMessage进行其他任何操作。    判断目标程序是否运行的办法也很多,这里介绍一个简单的办法,在上面(1)中如果找不到,则判断程序未运行,不过正规的办法是在进程列表中去找,这个办法要麻烦一点,就不在这里介绍了。
      

  13.   

    RE: 对了,那个“地形漫游”的程序还需要用户通过鼠标和键盘来操作,这样才能在其中行走。    使用 ::SendMessage 可以模拟鼠标和键盘,而且你可以用 SetFocus 将漫游程序的主窗口激活,以便使其接受键盘和鼠标消息。
      

  14.   


        使用 SetForegroundWindow 函数可以是窗口激活并显示在最上层,这比 SetFocus 好些。