读书人

DirectDraw 贴图有关问题 BLT函数没有

发布时间: 2012-09-14 23:00:48 作者: rapoo

DirectDraw 贴图问题 BLT函数没有出现效果
本人新学DirectDraw,想尝试从BMP文件中读取数据,然后用DDraw显示在一个窗口上.
但是执行了Blt函数以后没看到有图片.

具体的操作步骤如下:(为省篇幅省略错误处理)

C/C++ code
//创建LPDIRECTDRAW7    HRESULT hr=DirectDrawCreateEx(NULL,(void**)&m_pDDraw,IID_IDirectDraw7,NULL);         m_pDDraw->SetCooperativeLevel(hWnd,DDSCL_NORMAL|DDSCL_NOWINDOWCHANGES);//窗口模式//创建主屏表面    DDSURFACEDESC2 ddsd={0};    ddsd.dwFlags =  DDSD_CAPS ;     ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE ;//指定我们用的是前页.    ddsd.dwSize = sizeof(ddsd); //尺寸    m_pDDraw->CreateSurface(&ddsd,&m_pMyDDSFront,NULL);//创建离屏表面    ddsd.dwWidth = 400; //设定后页的大小,     ddsd.dwHeight = 300;    ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS|DDSD_PIXELFORMAT;     ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN|DDSCAPS_VIDEOMEMORY;//|DDSCAPS_SYSTEMMEMORY;    ddsd.ddpfPixelFormat.dwSize=sizeof(DDPIXELFORMAT);    ddsd.ddpfPixelFormat.dwFlags= DDPF_PALETTEINDEXED8|DDPF_RGB;     ddsd.ddpfPixelFormat.dwRGBBitCount = (DWORD)8;    hr=m_pDDraw->CreateSurface(&ddsd, &m_pMyDDSBack, NULL);//创建剪裁板    hr=m_pDDraw->CreateClipper(0,&pMyClipper,NULL);    hr=pMyClipper->SetHWnd(0,hWnd);    hr=m_pMyDDSFront->SetClipper(m_pMyClipper);    pMyClipper->Release();//设置调色板         LPDIRECTDRAWPALETTE pPalette=NULL;         hr=m_pDDraw->CreatePalette(DDPCAPS_8BIT|DDPCAPS_ALLOW256 | DDPCAPS_INITIALIZE,pal,&pPalette,NULL);         hr=m_pMyDDSBack->SetPalette(pPalette);//绘图    DDSURFACEDESC2 ddsd={0};    ddsd.dwSize=sizeof(ddsd);         //此处如果直接使用主屏表面Lock,则可以出现图像    hr = m_pMyDDSBack->Lock(NULL,&ddsd,DDLOCK_WAIT | DDLOCK_WRITEONLY,NULL);    //填充位图数据略    hr=m_pMyDDSBack->Unlock(NULL);      DDBLTFX  ddbltfx;    memset(&ddbltfx, 0, sizeof(ddbltfx));    ddbltfx.dwSize = sizeof(ddbltfx);    ddbltfx.dwROP = SRCCOPY;    RECT rc={0};    GetClientRect(m_hwnd,&rc);    ClientToScreen(m_hwnd,(LPPOINT)&rc);    ClientToScreen(m_hwnd,(LPPOINT)&rc + 1);    hr=m_pMyDDSFront->Blt(&rc,m_pMyDDSBack,NULL,DDBLT_WAIT,&ddbltfx);//执行后位图没有绘制在窗口上


以上调用返回都是成功的.不知道哪里有问题,还望高人指点一二.



[解决办法]
估计用DirectDraw的人比较少,帮顶了

读书人网 >VC/MFC

热点推荐