看到了一段代码,于是试验一下,没想到调试半天始终不能通过,请大家指点,谢谢!
现在出现的问题是建立主绘图页失败。
void CDXTestDlg::initDirectDraw()
{
HWND hwnd=AfxGetMainWnd()->GetSafeHwnd();
DDSURFACEDESC2 ddsd; // DirectDraw的页面描述
if(DD_OK != DirectDrawCreateEx (NULL, (void **)&lpDD,IID_IDirectDraw7, NULL)) //创建DirectDraw对象
MessageBox("建立DirectDraw对象失败!");
if(DD_OK != lpDD->SetCooperativeLevel(hwnd,DDSCL_NORMAL))//设置DirectDraw控制级
MessageBox("设定协调层级失败!");
HDC hdc = CreateDC("DISPLAY",NULL,NULL,NULL);
int colordeep=GetDeviceCaps(hdc,BITSPIXEL);
if(DD_OK != lpDD->SetDisplayMode(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),colordeep,0,DDSDM_STANDARDVGAMODE)) //设置显示模式
MessageBox("设定屏幕显示模式失败!");
DeleteDC(hdc);
memset(&ddsd, 0, sizeof(ddsd));//开始创建主页面,先清空页面描述
ddsd.dwSize = sizeof( ddsd );//填充页面描述
ddsd.dwWidth = GetSystemMetrics(SM_CXSCREEN); //设定后页的大小,
ddsd.dwHeight = GetSystemMetrics(SM_CYSCREEN);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; //有后台缓存
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_COMPLEX;//|DDSCAPS_FLIP;
ddsd.dwBackBufferCount = 1; //一个后台缓存
if(DD_OK != lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL)) //创建主页面
MessageBox("建立主绘图页失败!"); ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; //这是后台缓存
if(DD_OK != lpDDSPrimary->GetAttachedSurface( &ddsd.ddsCaps, &lpDDSBuffer )) //创建后台缓存
MessageBox("创建后台缓存失败!");
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; //这是离屏页面
if(DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSMap, NULL )) //创建放背景图的页面
MessageBox("创建放背景图的页面失败!");
ddsd.dwHeight=26;
ddsd.dwWidth=32;
if(DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSMouse, NULL))//创建放鼠标的页面
MessageBox("创建放鼠标的页面失败!");
//ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; //全屏显示 //清空各个页面
DDBLTFX ddBltFx;
ddBltFx.dwSize=sizeof(DDBLTFX);
ddBltFx.dwFillColor=0;
lpDDSPrimary ->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
//lpDDSBuffer->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSMap->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSMouse->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
return;
//贴图和设置透明色
/*
DDReLoadBitmap(lpDDSMap,"inn.BMP");
DDReLoadBitmap(lpDDSMouse,"mouse.BMP");
MakeRect(0,0,640,480);
lpDDSPrimary->BltFast(0,0,lpDDSMap,&r,NoKey);
DDSetColorKey(lpDDSMap,RGB(0,255,0));
DDSetColorKey(lpDDSMouse,RGB(0,255,0));
*/
}
现在出现的问题是建立主绘图页失败。
void CDXTestDlg::initDirectDraw()
{
HWND hwnd=AfxGetMainWnd()->GetSafeHwnd();
DDSURFACEDESC2 ddsd; // DirectDraw的页面描述
if(DD_OK != DirectDrawCreateEx (NULL, (void **)&lpDD,IID_IDirectDraw7, NULL)) //创建DirectDraw对象
MessageBox("建立DirectDraw对象失败!");
if(DD_OK != lpDD->SetCooperativeLevel(hwnd,DDSCL_NORMAL))//设置DirectDraw控制级
MessageBox("设定协调层级失败!");
HDC hdc = CreateDC("DISPLAY",NULL,NULL,NULL);
int colordeep=GetDeviceCaps(hdc,BITSPIXEL);
if(DD_OK != lpDD->SetDisplayMode(GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),colordeep,0,DDSDM_STANDARDVGAMODE)) //设置显示模式
MessageBox("设定屏幕显示模式失败!");
DeleteDC(hdc);
memset(&ddsd, 0, sizeof(ddsd));//开始创建主页面,先清空页面描述
ddsd.dwSize = sizeof( ddsd );//填充页面描述
ddsd.dwWidth = GetSystemMetrics(SM_CXSCREEN); //设定后页的大小,
ddsd.dwHeight = GetSystemMetrics(SM_CYSCREEN);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT; //有后台缓存
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_COMPLEX;//|DDSCAPS_FLIP;
ddsd.dwBackBufferCount = 1; //一个后台缓存
if(DD_OK != lpDD->CreateSurface(&ddsd, &lpDDSPrimary, NULL)) //创建主页面
MessageBox("建立主绘图页失败!"); ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER; //这是后台缓存
if(DD_OK != lpDDSPrimary->GetAttachedSurface( &ddsd.ddsCaps, &lpDDSBuffer )) //创建后台缓存
MessageBox("创建后台缓存失败!");
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; //这是离屏页面
if(DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSMap, NULL )) //创建放背景图的页面
MessageBox("创建放背景图的页面失败!");
ddsd.dwHeight=26;
ddsd.dwWidth=32;
if(DD_OK != lpDD->CreateSurface( &ddsd, &lpDDSMouse, NULL))//创建放鼠标的页面
MessageBox("创建放鼠标的页面失败!");
//ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; //全屏显示 //清空各个页面
DDBLTFX ddBltFx;
ddBltFx.dwSize=sizeof(DDBLTFX);
ddBltFx.dwFillColor=0;
lpDDSPrimary ->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
//lpDDSBuffer->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSMap->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
lpDDSMouse->Blt(NULL,NULL,NULL,DDBLT_WAIT|DDBLT_COLORFILL,&ddBltFx);
return;
//贴图和设置透明色
/*
DDReLoadBitmap(lpDDSMap,"inn.BMP");
DDReLoadBitmap(lpDDSMouse,"mouse.BMP");
MakeRect(0,0,640,480);
lpDDSPrimary->BltFast(0,0,lpDDSMap,&r,NoKey);
DDSetColorKey(lpDDSMap,RGB(0,255,0));
DDSetColorKey(lpDDSMouse,RGB(0,255,0));
*/
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货