那些游戏是全屏游戏,独立于Window窗体机制之外的
要切换到普通窗体,必须回到Window桌面而输入法窗体是一种特殊窗体,也是独立于Window窗体机制之外的
界面全部是画出来的,显示时直接BitBlt当前屏幕

解决方案 »

  1.   

    三星级的zyl910兄弟,能否给出更具体的说明,比如在输入汉字时,输入条也是这样形成的?如果我自己做的话,又如何能做到接受我输入的参数?还望知道的仁兄们不吝指教。
      

  2.   

    输入法不是BitBlt!
    BitBlt只是GDI方式下的一个图像传输函数。为了充分利用硬件加速,全屏游戏中的显示模式一般是独占模式,不外三种渲染方式:DirectDraw(D3D),OpenGL,和VOODOO的Glide。而普通的Windows窗口则是用GDI方式显示的。所以,要想把GDI方式的窗口显示在其他渲染方式下,需要把GDI窗口的图像转换到其他渲染方式支持的图像格式下才能显示出来。以DDraw为例,它直接支持GDI的BMP和DIB,所以一般是先把GDI窗口BitBlt成DIB(设备无关位图),然后在DDraw中Draw出来。(BMP DDraw也支持,但这样做必须保证独占模式的颜色位数和GDI的颜色位数一样才能兼容。否则,还是用设备无关位图比较好。当然如果你确定它们两个的颜色位数一样可以用BMP,这样省内存而且速度快。)
    然后,要想Draw出来的窗口象在Windows下一样可以使用,你还要处理各种事件,SendMessage到原GDI窗口。比如鼠标点击,你要根据在DDraw中Draw出来的窗口位置,确定鼠标x,y点的值,发送WM_LBUTTONDOWN和WM_LBUTTONUP。
    DDraw中Draw出来的窗口不能只Draw一次就完,因为你控制窗口后窗口会有变化,所以要一直连续重复BitBlt成DIB>DDraw中Draw,直到触发某个结束弹出窗口的条件。做这种弹出窗口必须要有相关显示方式下的知识,知道怎样在非GDI显示方式下显示图像。很多游戏修改工具的在游戏中弹出窗口的功能就是这样做的。DXSDK的DDraw中有一个例子FSWindow,你可以参考。
      

  3.   

    to fq1(),我理解你的意思了,但是我还想知道输入法是如何实现这一点的,是否光是使用输入方法编辑函数就可以实现了?现在我想我的程序或者用DDRAW,或者把它变成输入法。两者我都要试试。仁兄对此是否有好的想法和建议?
      

  4.   

    输入法窗口好像直接支持在DDraw中弹出,Windows已经帮你做了这件事。
    我没做过输入法,但我觉得应该不能直接把普通窗口变成输入法窗口,必须得自己编。所以,还是参考DXSDK的例子用DDraw来编是一个可行的解决办法!
      

  5.   

    to fq1()朋友,我另外开一贴给分。请去领。