窗口模式,在需要绘制的区域设子窗口,并把子窗口的句柄设成DirectDraw的句柄

解决方案 »

  1.   

    我的代码的节选,保证可以工作。    if (FAILED(DirectDrawCreateEx(NULL, (LPVOID*)&m_pdd, IID_IDirectDraw7, NULL))) {
            return InitFail();
        }
        if (FAILED(m_pdd->SetCooperativeLevel(m_hWnd, DDSCL_NORMAL))) {
            return InitFail();
        }
        ZeroMemory(&ddsd, sizeof(ddsd));
        ddsd.dwSize = sizeof(ddsd);
        ddsd.dwFlags = DDSD_CAPS;
        ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
        if (FAILED(m_pdd->CreateSurface(&ddsd, &m_pddsPrim, NULL))) {
            return InitFail();
        }
        LPDIRECTDRAWCLIPPER clipper;
        if (FAILED(m_pdd->CreateClipper(0, &clipper, NULL))) {
            return InitFail();
        }
        if (FAILED(clipper->SetHWnd(0, m_hWnd))) {
            return InitFail();
        }
        if (FAILED(m_pddsPrim->SetClipper(clipper))) {
            return InitFail();
        }
        clipper->Release();
      

  2.   

    to:lanzhengpeng2(兰征鹏)
      多谢 你这招 我也想过了,可是以现在工程的进度 恐怕是来不及了
    to:rocks_lee(石子儿)
       怎么实现的,从你的代码上 好象看不出什么东西啊,还是ddx7就支持这样的模式!
       能不能解释一下哦!
      

  3.   

    to:rocks_lee(石子儿) 
       大哥 能不能 把你的代码 让我看看exe 也行
      

  4.   

    要注意的几点:
    1, SetCooperativeLevel(m_hWnd, DDSCL_NORMAL), 因为是窗口模式,所以必须用DDSCL_NORMAL协作级,这样不会导致分辨率的变化。
    2,要创建Clipper,并用SetHWnd和你的对话框关联起来。
    3,主表面总是全屏幕,不过通过第二步,你的绘图指令不会超出裁剪区,但绘图的坐标是相对屏幕主上角的,所以你要和你的客户区坐标进行转换。
      

  5.   

    to:rocks_lee(石子儿)
    我了解你说的这些! 可是我的 我缩小了 主表面,可是结果 没有被画到的地方还是黑的
    我不明白这是为什么,我想在那里画点其他的东西,好麻烦啊!如果我把他的COLORKEY 设成黑的 会不会有点作用呢!
      

  6.   

    哦,会错意了……
    这样我想可以:动态创建一个static的子窗口,把它的客户区用作Clip……
      

  7.   

    我有一个写好的,把你的EMAIL留下,我发给你
      

  8.   

    to:rocks_lee(石子儿)
       一个工程 我 能同时建立 几个主表面啊! 是不是 只能建立一个,然后后备表面到是能建立很多。
    to:ZHLMNET(游水去喏!!!!) 
     不好意思 没有收到 你是发的 [email protected]
      

  9.   

    主表面只能有一个,绘图的坐标是相对屏幕左上角的。
    你可以这样考虑问题:主表面就是全屏幕,但可以用Clip来保证只有屏幕的一部分被更新,另外还要调整坐标,把你的窗口套在Clip区域上,让人看上去更新区域属于这个窗口……
      

  10.   

    多谢 rocks_lee(石子儿) 大哥了
    我现在明白多了。
    以前 也问过不少你 DirectDraw 和3D 的问题,多谢了!小弟有礼了。
    我在北京 你在那里?
    [email protected]
    [email protected]
    有空多联系!
      

  11.   

    哦 你也在北京 干脆哪天我请你吃饭得了,我可是真心的请啊,我在魏公村这片,你呢!
    我记得还有一个叫snake的家伙,在DIRECT方面也给过我不少帮助,不过可惜 他在南京。