我用DDraw7.0做了一个程序,是全屏显示的,但如果开着QQ,或点击Windows按键后,窗口最小化后,再击最大化,窗口就闪不能画,怎么解决啊

csdnzhu 2008-02-24 06:03:46
我用DDraw7.0做了一个程序,是全屏显示的,但如果开着QQ,或点击Windows按键后,窗口最小化后,再击最大化,窗口就闪,就是主窗口画面与DDRAW的画面交替显示,,怎么解决啊
int CMyDirectDraw::Init(HWND hwnd, int nScreen_Width, int nScreen_Height, CString strFuncName)
{
// pCMainFrame = *)AfxGetMainWnd();
// OutputDebugString(strFuncName);
// OutputDebugString("CMyDirectDraw::Init:START\n");
if (FAILED(DirectDrawCreateEx(NULL, (void **)&m_lpdd, IID_IDirectDraw7, NULL)))
{
return(0);
}
//
if(FAILED(m_lpdd->SetCooperativeLevel(hwnd,
DDSCL_ALLOWMODEX | DDSCL_FULLSCREEN |
DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)) ) //
{
return(0);
}

if (FAILED(m_lpdd->SetDisplayMode(nScreen_Width, nScreen_Height, SCREEN_BPP,0,0)))
{
return(0);
}

DDRAW_INIT_STRUCT(m_ddsd); //清零的宏;

m_ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
m_ddsd.dwBackBufferCount = 1;
m_ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;

//创建主表面;
if (FAILED(m_lpdd->CreateSurface(&m_ddsd, &m_lpddsprimary, NULL)))
{
return(0);
}

m_ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;

if (FAILED(m_lpddsprimary->GetAttachedSurface(&m_ddsd.ddsCaps, &m_lpddsback)))
{
return(0);
}

//设置后备缓冲区的剪裁区;
RECT screen_rect= {0,0,nScreen_Width,nScreen_Height};
m_lpddclipper = AttachClipper(m_lpddsback,1,&screen_rect, "CMyDirectDraw::Init\n");


return 1;
}
...全文
290 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧