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的人比较少,帮顶了