游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1108|回复: 0

在表面上写点时出现的错误

[复制链接]

3

主题

8

帖子

33

积分

注册会员

Rank: 2

积分
33
发表于 2006-6-26 14:23:00 | 显示全部楼层 |阅读模式
void GameInit(HWND hWnd)
{

        if (FAILED(DirectDrawCreateEx(NULL, (void **)&lpDDraw7,
                                                           IID_IDirectDraw7, NULL)))
                MessageBox(hWnd,"ddraw create error","ERROR",MB_OK);

        //设置协作等级
        if(FAILED(lpDDraw7->SetCooperativeLevel(hWnd,
                                                                                                DDSCL_FULLSCREEN |
                                                                                        DDSCL_ALLOWMODEX |
                                                                                        DDSCL_EXCLUSIVE  |
                                                                                        DDSCL_ALLOWREBOOT
                                                                                                )))
                MessageBox(hWnd,"setdisplaymodecreateerror","ERROR",MB_OK);

       

        //设置显示模式
        if(FAILED(lpDDraw7->SetDisplayMode(640,480,16,0,0)))
        {
                MessageBox(hWnd,"setdisplaymode create error","ERROR",MB_OK);
        }

        //创建主表面
        memset(&ddsd,0,sizeof(ddsd));
        ddsd.dwSize=sizeof(ddsd);
        ddsd.dwFlags=DDSD_CAPS;
        ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;     //该表面为主显示表面
       
        if(FAILED(lpDDraw7->CreateSurface(&ddsd,&lpddsprimary,NULL)))
                MessageBox(hWnd,"connot create surface","ERROR",MB_OK);                               
}
void GameMain(HWND hWnd)
{
        //锁住主表面
        memset(&ddsd,0,sizeof(ddsd));
        ddsd.dwSize=sizeof(ddsd);
       
        if(FAILED(lpddsprimary->Lock(NULL,&ddsd,
                                DDLOCK_SURFACEMEMORYPTR |   DDLOCK_WAIT,NULL)))
               {
                MessageBox(hWnd, "connot lock the primarysurface","ERROR",MB_OK);
               }

        USHORT lpitch16=(USHORT)(ddsd.lPitch>>1);
        USHORT * video_buffer=(USHORT *)ddsd.lpSurface;

        for(int i=lpitch16*100+100;i<lpitch16*100+200;i++)
               {
                video_buffer=_RGB16BIT565(255,0,0);
                }

        //解锁主表面
        if(FAILED(lpddsprimary->Unlock(NULL)))
                MessageBox(hWnd,"connot unlock the primarysurface",ERROR,MB_OK);

}
void GameFini()
{
        // the primary surface
        if (lpddsprimary)
        {
           lpddsprimary->Release();
           lpddsprimary = NULL;
        } // end if
        // now blow away the IDirectDraw interface
        if (lpDDraw7)
        {
           lpDDraw7->Release();
           lpDDraw7 = NULL;
        } // end if
}

执行结果和预想的一样是画一条直线没有错误,但退出程序后出现发送错误报告,请问高手这是什么原因造成,画一个象素点的时候也同样错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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