游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8592|回复: 9

[请教]关于LPDIRECTDRAWSURFACE7

[复制链接]

7

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
QQ
发表于 2004-11-24 15:30:00 | 显示全部楼层 |阅读模式
  最近遇到个问题:
            想请教一下LPDIRECTDRAWSURFACE7   lpsurf
                           LPDIRECTDRAWSURFACE7   &lpsurface
                           LPDIRECTDRAWSURFACE7   *lpsurface的区别
            

11

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2004-11-24 15:43:00 | 显示全部楼层

Re:[请教]关于LPDIRECTDRAWSURFACE7

1.
LPDIRECTDRAWSURFACE7   = IDirectDrawSurface7*

2.
LPDIRECTDRAWSURFACE7& = (IDirectDrawSurface7*)&

3.
LPDIRECTDRAWSURFACE7* = IDirectDrawSurface7**
ex: IDirectDraw7::CreateSurface(LPDDSURFACEDESC2 lpDDSurfaceDesc2,        
  LPDIRECTDRAWSURFACE7 FAR *lplpDDSurface,  
  IUnknown FAR *pUnkOuter                  
);

7

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
QQ
 楼主| 发表于 2004-11-24 16:43:00 | 显示全部楼层

Re:[请教]关于LPDIRECTDRAWSURFACE7

  可不可以这样认为:LPDIRECTDRAWSURFACE7 &= IDirectDrawSurface
     (IDirectDrawSurface7*)&是什么的类型呢???
     &在这里是有引用的意思吗???

11

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2004-11-24 17:03:00 | 显示全部楼层

Re:[请教]关于LPDIRECTDRAWSURFACE7

指?说?⒖贾
例如

LPBYTE MyNew(int nSize)
{
   LPBYTE pData = new BYTE[nSize];
   return pData;
}

LPBYTE pData = MyNew(10);

-----------------------------------------------------------------------------

int MyNew2(int nSize, LPBYTE* ppData)
{
   LPBYTE pData = new BYTE[nSize];

   if (pData == NULL)
   {
      *(ppData) = NULL;
      return S_FALSE;
    }
    *(ppData) = pData;
      return S_OK;
}

LPBYTE pData;
MyNew2(10, &pData);

-----------------------------------------------------------------------------

int MyNew3(int nSize, LPBYTE& pData2)
{
   LPBYTE pData = new BYTE[nSize];

   if (pData == NULL)
   {
      pData2 = NULL;
      return S_FALSE;
    }
    pData2 = pData;
    return S_OK;
}


LPBYTE pData;
MyNew3(10, pData);

-----------------------------------------------------------------------------
??涌吹枚??

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2004-11-24 20:13:00 | 显示全部楼层

Re:[请教]关于LPDIRECTDRAWSURFACE7

首先LPDIRECTDRAWSURFACE7本身就是一个指针,所以
LPDIRECTDRAWSURFACE7 lpsurf就是一个指向IDirectDrawSurface7的指针。
第二,LPDIRECTDRAWSURFACE7 & 是一个指向指针的引用;LPDIRECTDRAWSURFACE7 *是一个指向指针的指针(也较二级指针)。
第三,使用方法,如果需要从一个函数中返回建立好的LPDIRECTDRAWSURFACE7的接口,如果使用的引用,则,
void CreateSurface(LPDIRECTDRAWSURFACE7 &lpsurf)
{
//想普通建立一个surface一样建立它
}

如果是使用的二级指针,则,
void CreateSurface(LPDIRECTDRAWSURFACE7 *lpsurf)
{
//要使用lpsurf的话,需要这样使用它:  *lpsurf,如: (*lpsurf)->XXX
}

7

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
QQ
 楼主| 发表于 2004-11-25 08:01:00 | 显示全部楼层

Re:[请教]关于LPDIRECTDRAWSURFACE7

   多谢楼上的两位高手!!!
   不过我还有一个疑问?那么什么时候可以用LPDIRECTDRAWSURFACE7 &lpsurf
         void CreateSurface(LPDIRECTDRAWSURFACE7 &lpsurf)
        {
         //象普通建立一个surface一样建立它
       }
      那我可不可以这样呢?
       void CreateSurface(LPDIRECTDRAWSURFACE7 lpsurf)
      {
      //象普通建立一个surface一样建立它
      }
     
     说实在的我对指针的引用不是太了解。
     请教一下两位大虾!!

4

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2004-11-25 09:00:00 | 显示全部楼层

Re:[请教]关于LPDIRECTDRAWSURFACE7

当然可以了~
以上两位大哥在给你讲使用方法~(你提的三种问题)
最好看看c++中指针、引用的详细使用方法,写程序时非常有用~

7

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
QQ
 楼主| 发表于 2004-11-25 11:33:00 | 显示全部楼层

Re:[请教]关于LPDIRECTDRAWSURFACE7

   多谢了,可是我在使用的时候就是遇到了这样的问题啊??
  把LPIDRECTDDRAWSURFACE7 &lpsurf   换成LPIDRECTDDRAWSURFACE7  lpsurf
  就会出错,程序会无故退出???这让我很是郁闷啊??
          我的函数:
          BOOL CDDraw::CreateSurface (LPDIRECTDRAWSURFACE7 &lpSurf,int Width,int Height,DWORD MemoryFlag)
{
        DDSURFACEDESC2 ddsd;
        HRESULT ddrval;

        ZeroMemory(&ddsd,sizeof(ddsd));
        ddsd.dwSize=sizeof(ddsd);
        ddsd.dwFlags=DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH;
        ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN|MemoryFlag;
        ddsd.dwWidth=Width;
        ddsd.dwHeight=Height;

        ddrval=lpDD->CreateSurface(&ddsd,&lpSurf,NULL);
        if(FAILED(ddrval))
        {
                MessageBox(hWnd,"创建offscreen失败","ERROR",MB_OK);
                return FALSE;
        }

        return TRUE;

}
BOOL CDDraw:oadBMPSurface (LPDIRECTDRAWSURFACE7 &lpSurf,int Width,int Height,LPCSTR  BitmapFile,DWORD MemoryFlag)
{
        HDC hdc;
        HDC hdcImage;
        HBITMAP hbm;
        BITMAP bm;
        BOOL bResult;
        HRESULT ddrval;
        DDSURFACEDESC2 ddsd;

        hbm=(HBITMAP)LoadImage(NULL,BitmapFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
        if(hbm==NULL)
        {
                MessageBox(hWnd,"装载位图到hbm失败","ERROR",MB_OK);
                return FALSE;

        }
        hdcImage=CreateCompatibleDC(NULL);
        if(hdcImage==NULL)
        {
                MessageBox(hWnd,"创建hdcImage失败","ERROR",MB_OK);
                return FALSE;
        }
        SelectObject(hdcImage,hbm);
        GetObject(hbm,sizeof(bm),&bm);
        Width=(Width==0?bm.bmWidth :Width);
        Height=(Height==0?bm.bmHeight :Height);
        bResult=CreateSurface(lpSurf,Width,Height,MemoryFlag);
        if(!bResult)
        {
                MessageBox(hWnd,"创建页面...失败","ERROR",MB_OK);
                return FALSE;

        }

        ddsd.dwSize=sizeof(ddsd);
        lpSurf->GetSurfaceDesc(&ddsd);
        ddrval=lpSurf->GetDC(&hdc);
        if(BitmapFile!=NULL)
        {
                if(ddrval==DD_OK)
                {
                        StretchBlt(hdc,0,0,ddsd.dwWidth,ddsd.dwHeight,hdcImage,0,0,bm.bmWidth ,bm.bmHeight ,SRCCOPY);
                        lpSurf->ReleaseDC(hdc);
                }

        }
        DeleteDC(hdcImage);
        if(ddrval!=DD_OK)
        {
                MessageBox(hWnd,"得到lpSurf设备失败","ERROR",MB_OK);
                return FALSE;
        }
        return TRUE;

}



是装载一个位图到lpsurf, &lpsurf运行正确,lpsurf调试无错,运行则无故跳出了

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2004-11-25 21:15:00 | 显示全部楼层

Re: Re:[请教]关于LPDIRECTDRAWSURFACE7

gameover: Re:[请教]关于LPDIRECTDRAWSURFACE7

   多谢楼上的两位高手!!!
   不过我还有一个疑问?那么什么时候可以用LPDIRECTDRAWSURFACE7 &lpsu...

你的问题可以这样理解,如下:
void getMem(int **p)
{
    *p = new int [10];
}

void main()
{
    int *p = NULL;
    getMem(&p);
    delete [] p;
}
如上,如果你在函数中需要动态定位参数p的话,最好使用二级指针;如果你只是在函数中调用指针的成员的话,可以使用一级指针;
但是,使用指针可能让你觉得有些不舒服,没关系,使用指向指针的引用即可,它的功能同二级指针有些类似。
另外,你可以看看相应程序的反汇编,就会明白我说的意思了!

7

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
QQ
 楼主| 发表于 2004-11-26 08:16:00 | 显示全部楼层

Re:[请教]关于LPDIRECTDRAWSURFACE7

  多谢!!
  我想我应该好好去看书了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 10:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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