看到了一段代码,于是试验一下,没想到调试半天始终不能通过,请大家指点,谢谢!
现在出现的问题是建立主绘图页失败。
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));
*/
}

解决方案 »

  1.   

    猜想是不是的合作级是Normal,但是创建的窗口确是全屏幕的,你试试看是不是这里的冲突
      

  2.   

    谢谢大家,我想做的就是在窗口模式,准确的说是在一个Dialog窗口中用DirectDraw显示一个图片,请大家帮忙啊!
      

  3.   

    顶上去,或者谁给个窗口模式下使用DirectDraw显示图片的例子也可以,谢谢
      

  4.   

    uoice能给提供一个对话框模式下使用DX的例子么?着急啊,请大家多多支持,分不够继续给啊~~
      

  5.   

    http://www.codeproject.com/directx/c3dportal.asp
      

  6.   

    http://www.codeproject.com/directx/DirectXDialogTemplate.asp