游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4465|回复: 7

请大家帮个忙,ddraw下把全屏模式改为窗口模式需要怎么做

[复制链接]

4

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2005-7-5 10:00:00 | 显示全部楼层 |阅读模式

    下面是我的代码,建立的是ddraw全屏的环境,我想改为窗口模式,不知道要做那些改动,
我把协调层级函数(pDD7->SetCooperativeLevel)里的参数
(DDSCL_EXCLUSIVE |        DDSCL_FULLSCREEN|DDSCL_ALLOWREBOOT )
改为DDSCL_NORMAL但是不行。请大家帮个忙,谢谢。


   //建立dx对象
    result = DirectDrawCreateEx(NULL, (VOID**)&pDD7, IID_IDirectDraw7, NULL);

        //协调层级,参数1、该应用程序句柄,2、独占|全屏|允许用ctrl等建
        result = pDD7->SetCooperativeLevel(mhWnd,DDSCL_EXCLUSIVE |
                                 DDSCL_FULLSCREEN|DDSCL_ALLOWREBOOT );

        //设置显示模式1、2、分辨率3、色位16位、4、刷新率0为默认当前刷新率5、标准VGA模式
        result = pDD7->SetDisplayMode(800,600,16,0,DDSDM_STANDARDVGAMODE);  


        //清空desc所在的内存
        memset(&desc,0,sizeof(desc));

        desc.dwSize = sizeof(desc);           
        //标志一会要用到的成员函数
        desc.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
        //后缓冲区数量
        desc.dwBackBufferCount = 1;  

        //描述结构设置  主绘图页|允许叠加|允许翻转
        desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
        //建立主绘图页
        result = pDD7->CreateSurface(&desc,&pPSur,NULL);

        //描述结构设置,后缓冲区
        caps.dwCaps = DDSCAPS_BACKBUFFER;  
        //建立后缓冲区
        result = pPSur->GetAttachedSurface(&caps,&pBBuf);

        memset(&desc,0,sizeof(desc));        
        desc.dwSize = sizeof(desc);
        desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
        //描述结构设置  幕后暂存区
        desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
       
        desc.dwWidth = 800;
        desc.dwHeight = 600;
        //建立幕后暂存区
        for(int i=0;i<40;i++)
        {
                result = pDD7->CreateSurface(&desc, &pOPla, NULL);
        }



abcabc

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-7-5 10:40:00 | 显示全部楼层

Re:请大家帮个忙,ddraw下把全屏模式改为窗口模式需要怎

SetCooperativeLevel参数改为DDSCL_NORMAL

只生成PrimarySurface,不能使用BackBuffer,不能使用Flip方法翻转页面,好像BltFast也有问题

10

主题

40

帖子

42

积分

注册会员

Rank: 2

积分
42
发表于 2005-7-7 17:56:00 | 显示全部楼层

Re:请大家帮个忙,ddraw下把全屏模式改为窗口模式需要怎

改成窗口模式还是比较麻烦的,个人认为, 我没有改过的

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2006-6-18 09:21:00 | 显示全部楼层

Re:请大家帮个忙,ddraw下把全屏模式改为窗口模式需要怎

111111111111111111

10

主题

95

帖子

95

积分

注册会员

Rank: 2

积分
95
QQ
发表于 2006-6-18 23:15:00 | 显示全部楼层

Re:请大家帮个忙,ddraw下把全屏模式改为窗口模式需要怎

先注销ddraw,一切重来

8

主题

310

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
QQ
发表于 2006-6-19 16:43:00 | 显示全部楼层

Re:请大家帮个忙,ddraw下把全屏模式改为窗口模式需要怎

1.SetCooperativeLevel参数改为DDSCL_NORMAL
2.建主表面
3.使用裁剪器
4.建后台表面

97

主题

590

帖子

590

积分

高级会员

Rank: 4

积分
590
QQ
发表于 2006-6-19 16:51:00 | 显示全部楼层

Re:请大家帮个忙,ddraw下把全屏模式改为窗口模式需要怎

后缓冲没了,FLIP没了,BLTFAST也没了,用BLT代替,直接从幕后层画到主表面

14

主题

163

帖子

178

积分

注册会员

Rank: 2

积分
178
QQ
发表于 2006-6-25 05:00:00 | 显示全部楼层

Re: Re:请大家帮个忙,ddraw下把全屏模式改为窗口模式需要

怪盗基德: Re:请大家帮个忙,ddraw下把全屏模式改为窗口模式需要怎么做

后缓冲没了,FLIP没了,BLTFAST也没了,用BLT代替,直接从幕后层画到主表面

可以不用裁减器,下面就是一个例子,采用BltFast绘图的窗口模式.
不过这个程序有点小毛病,也不知这个毛病是否能通过WinAPI解决,算了不管这个!

sf_200662545954.rar

30.12 KB, 下载次数:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 19:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表