创建了一个离层表面 ddsd.dwSize=sizeof(ddsd); //创建离层表面
ddsd.dwFlags=DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH |
DDSD_PIXELFORMAT; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
ddsd.dwWidth =WIDTH;
ddsd.dwHeight=HEIGHT;
ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB ; ddsd.ddpfPixelFormat.dwFlags=DDPF_RGB;
ddsd.ddpfPixelFormat.dwRGBBitCount=24;
ddsd.ddpfPixelFormat.dwRBitMask = 0x00FF0000;
ddsd.ddpfPixelFormat.dwGBitMask = 0x0000FF00;
ddsd.ddpfPixelFormat.dwBBitMask = 0x000000FF; 然后用 unsigned char* lpSurf = (unsigned char*)desc.lpSurface;最后对lpSurf操作,怎么画面没有显示呢? 那位又ddraw的窗口模式的例子,,能不能发给我
efengyu@eyou.com
ddsd.dwFlags=DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH |
DDSD_PIXELFORMAT; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
ddsd.dwWidth =WIDTH;
ddsd.dwHeight=HEIGHT;
ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB ; ddsd.ddpfPixelFormat.dwFlags=DDPF_RGB;
ddsd.ddpfPixelFormat.dwRGBBitCount=24;
ddsd.ddpfPixelFormat.dwRBitMask = 0x00FF0000;
ddsd.ddpfPixelFormat.dwGBitMask = 0x0000FF00;
ddsd.ddpfPixelFormat.dwBBitMask = 0x000000FF; 然后用 unsigned char* lpSurf = (unsigned char*)desc.lpSurface;最后对lpSurf操作,怎么画面没有显示呢? 那位又ddraw的窗口模式的例子,,能不能发给我
efengyu@eyou.com
CoInitialize(NULL);** CreateWindow
// 建窗口之后就可以初始化DDraw - 全屏的
if (FAILED(DirectDrawCreateEx(NULL, (LPVOID *) &g_lpDD, IID_IDirectDraw7, NULL)))
{
return FALSE;
}if (FAILED(g_lpDD->SetCooperativeLevel(g_hWnd, DDSCL_ALLOWREBOOT | DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN)))
{
return FALSE;
}if (FAILED(g_lpDD->SetDisplayMode(1024, 768, 16, 0/*refresh rate*/, DDSDM_STANDARDVGAMODE)))
{
return FALSE;
}DDSURFACEDESC2 ddsd = {0}; // surface description structure
ddsd.dwSize = sizeof(ddsd);// create primary surface
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
g_lpDD->CreateSurface(&ddsd, &g_lpddsPrimary, NULL);
// create a back surface
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
ddsd.dwWidth = 1024;
ddsd.dwHeight = 768;
if (FAILED(g_lpDD->CreateSurface(&ddsd, &g_lpddsStore, NULL)))
{
return FALSE;
}if(FAILED(g_lpDD->CreateClipper(0, &pcClipper, NULL)))
{
return FALSE;
}if(FAILED(pcClipper->SetHWnd(0, g_hWnd)))
{
pcClipper->Release();
return FALSE;
}if(FAILED(g_lpddsPrimary->SetClipper(pcClipper)))
{
pcClipper->Release();
return FALSE;
}// fill background with black
HDC dxHDC = NULL;
RECT rc = {0};
GetClientRect(g_hWnd, &rc);
g_lpddsStore->GetDC(&dxHDC);
FillRect(dxHDC, &rc, (HBRUSH) GetStockObject(BLACK_BRUSH));
g_lpddsStore->ReleaseDC(dxHDC);** // WM_PAINT消息处理
HDC dxHDC = NULL;
LPCTSTR lpszMessage = "This is a stinky Application";
RECT rt;
POINT p = {0, 0};ClientToScreen(hWnd, &p);
rt.left = 0 + p.x;
rt.top = 0 + p.y;
rt.right = 1024 + p.x;
rt.bottom = 768 + p.y;RECT rt2 = {100, 100, 200, 200};
g_lpddsStore->GetDC(&dxHDC);
SetTextColor(dxHDC, RGB(255, 0, 0));
TextOut(dxHDC, 20, 60, lpszMessage, lstrlen(lpszMessage));
SelectObject(dxHDC, (HPEN) GetStockObject(WHITE_PEN));
MoveToEx(dxHDC, 100, 100, NULL); LineTo(dxHDC, 200, 500);
g_lpddsStore->ReleaseDC(dxHDC);
dxHDC = NULL;while (TRUE)
{
HRESULT hRet = g_lpddsPrimary->Blt(&rt, g_lpddsStore, NULL, DDBLT_WAIT, NULL);
if (hRet == DD_OK)
{
break;
}
else if (hRet == DDERR_SURFACELOST)
{
g_lpddsPrimary->Restore();
g_lpddsStore->Restore();
}
else if(hRet != DDERR_WASSTILLDRAWING)
{
break;
}
}
// 程序结束时不忘释放
pcClipper->Release();
g_lpddsPrimary->Release();
g_lpddsStore->Release();
g_lpDD->Release();
CoUninitialize();