想在DirectX全屏界面下能弹出一个对话框,并且能显示自己的信息。要能像金山游侠那样的智能弹出。或者能直接对DirectX界面操作(TextOut,Line等)参考xenix的大作,做过一些尝试,有过不少收获。http://www.csdn.net/develop/Read_Article.asp?Id=15381
首先,确实能在一些游戏界面下弹出对话框,并且可以自己控制对话框内的控件。比如:传奇、大航海时代等游戏。
但是,在《星级争霸》游戏界面下弹出的对话框不是经常可见的(一般是不可见的,如果鼠标在对话框上动作,则能看到对话框一会,又消失了)。经过思考,可能是由于DirectX不停地Flip以及更新画面导致对话框显示后被刷新没了。当有鼠标动作时,重绘对话框(这时就能看见),但马上又被刷新了。而且使用这种方法对对话框内的控件进行控制很麻烦(在DialogProc中处理消息,我还不会别的方法)。如果想在对话框中使用一个自己订做的控件,我还没有想到解决的方法。也就是只能使用常规控件。因为在创建对话框的时候使用的是CreateDialog或DialogBox时,只是使用了资源模板并没有用到对话框的类资源。高手不吝赐教啊!!!!!!!!!!!!!!!!!!
#######提供思路也行#######
up 有分

解决方案 »

  1.   

    大家好!你们知不知道有个大一新生很厉害啊。
    他叫李维,写过不少有水平的源码。我这个专业程序员也常向他请教。他的个人网站
    http://ultratools.icpcn.com/
    上面有你们想要的答案,有源码!
      

  2.   

    星际是汇编写的,我以前看过一部分代码,有的地方都看晕了,你可以试试在奔一75MHZ,WIN95的处理器上都跑起来很流畅,简直是一大杰作,我感觉星际和QUAKE都是精品,在速度上相当快。
      

  3.   

    星际是汇编写的,我以前看过一部分代码,有的地方都看晕了,你可以试试在奔一75MHZ的处理器上,WIN95都跑起来很流畅,简直是一大杰作,我感觉星际和QUAKE都是精品,在速度上相当快。学游戏编程的网站很多的。
      

  4.   

    我想星际应该是C写的吧,以前在暴雪的官方网站上有一部分代码,难度很大,几乎是看不懂!另外我想楼主说的哪个不应该是对话框吧!我感觉那应该是一个图片,他会不断的判断鼠标的位置,当鼠标放指定的位置上的时候,一些动画的效果!这个应该是通过DX的前后缓冲交换来实现的!上面是我的一点想法,大家继续讨论!
      

  5.   

    进程注入?我也曾这么想过,不过还没试过。
    由谁用过CreateDialog()或DialogBox()?函数给在别的窗口B中创建过对话框?
    如果创建对话框的程序A没有结束之前关闭窗口B,必然会出现一个程序运行错误的系统提示
    如何解决?
      

  6.   

    采用消息怎么样?:创建一全程非模式,当有需要call 对话,就送消息去窗口,有主窗口弹出对话框.
      

  7.   

    关于 星际是不是用DX写的尚有待商榷.
    很简单的问题,你用工具将DX删除点,在运行
    星际,试试就知道了,列如:winamp就没用DX
      

  8.   

    OpenProcess
    SuspendProcess
    截屏
    弹出对话框
    清除
    ResumeProcess
    CloseHandle估计是这样
      

  9.   

    微软的DirectX有例子,以下是片断,自己去看一下完整的(FullScreenDialog):
                   case IDM_SHOW_DIALOG: &&就是这里啦!(hInst,hWnd要改为目标程式的)
                        {
                            HINSTANCE hInst; 
    #ifdef _WIN64
                            hInst = (HINSTANCE) GetWindowLongPtr( hWnd, GWLP_HINSTANCE );
    #else
                            hInst = (HINSTANCE) GetWindowLong( hWnd, GWL_HINSTANCE );
    #endif
                            g_hWndDlg = CreateDialog( hInst, MAKEINTRESOURCE(IDD_DIALOG_SAMPLE),
                                                     hWnd, (DLGPROC) SampleDlgProc );
                            ShowWindow( g_hWndDlg, SW_SHOWNORMAL );
                        }
                        break;
                }
                break; // Continue with default processing
     
      

  10.   

    我目前就是这样做的,但是在《星际争霸》这个游戏下弹出来的对话框,跟正常窗口中探出来的对话框不一样,就像我说得那样:"但是,在《星级争霸》游戏界面下弹出的对话框不是经常可见的(一般是不可见的,如果鼠标在对话框上动作,则能看到对话框一会,又消失了)。",这是为什么?
    还有FullScreenDialog例子是在哪里?MSDN?还是在DIRECTX SDK文档里?
      

  11.   

    在DIRECTX SDK的SAMPLES目录下就有,其实大家应该都研究一下这样
      

  12.   

    在DIRECTX SDK的SAMPLES目录下就有,其实大家应该都研究MS提供的例子,有些真的很有用很经典,我发现85%的问题,MS都有差不多的例子,问题是大家有没有真正深入研究!
      

  13.   

    我这里没有Driectx SDK,能不能给我发一份过来?不甚感激
    Email:[email protected]
      

  14.   

    很简单,弹出之前暂停游戏就ok了.
    去我的网站下载新版范例吧,http://ultratools.icpcn.com/prod/dxpopup.htm
      

  15.   

    星际肯定是dx 的,没看他的系统要求里写着 DirectX 3
    星际肯定不是汇编写的,谁有能力用汇编组织那么大的程序。用 WinHex 打开 starcraft.exe 末尾可以看到很多的字符串,比如 lang.cpp ...还有楼上的几位兄弟搞错了,微软的是DX程序自己弹出对话框,而搂住要的是用别的程序在游戏中出对话框,就像《金山游侠》