游戏开发论坛

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

ddraw杂载入位图

[复制链接]

5

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2005-12-5 10:10:00 | 显示全部楼层 |阅读模式
int game_main()
{
lpback->GetSurfaceDesc(&ddsd);
lpback->Lock(NULL,&ddsd,DDLOCK_WAIT|DDLOCK_SURFACEMEMORYPTR, NULL);
RECT rect;
rect.left=0;rect.top=0,rect.right=256,rect.bottom=256;
lpback->BltFast(0,0,lpDDopl,&rect,DDBLTFAST_WAIT);
lpback->Unlock(NULL);
lpprimary->Flip(NULL,DDFLIP_WAIT);
Sleep(1000);
if(KEYDOWN(VK_ESCAPE))
SendMessage(main_window_handle,WM_CLOSE,0,0);
return(1);
}

int game_init()
{

if (FAILED(DirectDrawCreateEx(NULL, (void **)&lpd7, IID_IDirectDraw7, NULL)))
   return(0);
lpd7->SetCooperativeLevel(main_window_handle,DDSCL_FULLSCREEN|DDSCL_EXCLUSIVE|DDSCL_ALLOWMODEX|DDSCL_ALLOWREBOOT);
lpd7->SetDisplayMode(width,hight,8,0,0);
DDSURFACEDESC2 ddsd;
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
ddsd.dwBackBufferCount = 1;
if(FAILED(lpd7->CreateSurface(&ddsd,&lpprimary,NULL)))
return 0;
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
if (FAILED(lpprimary->GetAttachedSurface(&ddsd.ddsCaps, &lpback)))
return(0);
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS |DDSD_HEIGHT|DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwWidth=256;
ddsd.dwHeight=256;
if (FAILED(lpd7->CreateSurface(&ddsd, &lpDDopl, NULL)))
   return(0);
HBITMAP bitmap; //声明HBITMAP对象
hdc=::CreateCompatibleDC(NULL);
bitmap=(HBITMAP):oadImage(NULL,"Grass.bmp",IMAGE_BITMAP,256,256,LR_LOADFROMFILE);
if(bitmap==NULL)
return(0);
::SelectObject(hdc,bitmap);
HRESULT result;
lpDDopl->GetSurfaceDesc(&ddsd);
result= lpDDopl->GetDC(&hdc1);
if(result!=DD_OK)
return 0;
::BitBlt(hdc1,0,0,ddsd.dwWidth,ddsd.dwHeight,hdc,0,0,SRCCOPY);
lpDDopl->ReleaseDC(hdc1);
::ReleaseDC(NULL,hdc);
return 1;
}
int WINAPI WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
                ::RegisterClassEx(&wndclass);
        HWND hwnd=::CreateWindowEx(L);
        if(hwnd==NULL)
        {
                ::MessageBox(NULL,"error","errror",MB_OK);
                return -1;
        }
        main_window_handle=hwnd;
        game_init();
        while(true)
        {        if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
                {
                                }
                game_main();
        }

        game_shutdown();
        return msg.wParam;
}

请问下为什么图像显不出来啊,谢谢了。

5

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2005-12-5 12:46:00 | 显示全部楼层

Re:ddraw杂载入位图

请大家帮忙指正一下嘛

0

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
发表于 2005-12-5 13:08:00 | 显示全部楼层

Re:ddraw杂载入位图

别lock

5

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2005-12-5 16:58:00 | 显示全部楼层

Re:ddraw杂载入位图

谢了,能显示了。是什么原因不能LOCK?

0

主题

46

帖子

46

积分

注册会员

Rank: 2

积分
46
发表于 2005-12-5 17:07:00 | 显示全部楼层

Re:ddraw杂载入位图

我只知道lock是用来自己操作页面内容的

5

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2005-12-5 17:27:00 | 显示全部楼层

Re:ddraw杂载入位图

哦,知道了。非常感谢。

2

主题

13

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2005-12-5 20:54:00 | 显示全部楼层

Re:ddraw杂载入位图

when you operate the video buffer by yourself, you should lock it......However, you use HDC to resolve this, so you don't need it!

9

主题

48

帖子

53

积分

注册会员

Rank: 2

积分
53
QQ
发表于 2005-12-17 16:05:00 | 显示全部楼层

Re:ddraw杂载入位图

在DX中用GDI,会有自己的锁定机制。不需要DX的锁定。
游戏编程大师上讲了的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 00:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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