DirectDraw牛人 救命啊!!! 窗口模式,在需要绘制的区域设子窗口,并把子窗口的句柄设成DirectDraw的句柄 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的代码的节选,保证可以工作。 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(); to:lanzhengpeng2(兰征鹏) 多谢 你这招 我也想过了,可是以现在工程的进度 恐怕是来不及了to:rocks_lee(石子儿) 怎么实现的,从你的代码上 好象看不出什么东西啊,还是ddx7就支持这样的模式! 能不能解释一下哦! to:rocks_lee(石子儿) 大哥 能不能 把你的代码 让我看看exe 也行 要注意的几点:1, SetCooperativeLevel(m_hWnd, DDSCL_NORMAL), 因为是窗口模式,所以必须用DDSCL_NORMAL协作级,这样不会导致分辨率的变化。2,要创建Clipper,并用SetHWnd和你的对话框关联起来。3,主表面总是全屏幕,不过通过第二步,你的绘图指令不会超出裁剪区,但绘图的坐标是相对屏幕主上角的,所以你要和你的客户区坐标进行转换。 to:rocks_lee(石子儿)我了解你说的这些! 可是我的 我缩小了 主表面,可是结果 没有被画到的地方还是黑的我不明白这是为什么,我想在那里画点其他的东西,好麻烦啊!如果我把他的COLORKEY 设成黑的 会不会有点作用呢! 哦,会错意了……这样我想可以:动态创建一个static的子窗口,把它的客户区用作Clip…… 我有一个写好的,把你的EMAIL留下,我发给你 to:rocks_lee(石子儿) 一个工程 我 能同时建立 几个主表面啊! 是不是 只能建立一个,然后后备表面到是能建立很多。to:ZHLMNET(游水去喏!!!!) 不好意思 没有收到 你是发的 [email protected] 主表面只能有一个,绘图的坐标是相对屏幕左上角的。你可以这样考虑问题:主表面就是全屏幕,但可以用Clip来保证只有屏幕的一部分被更新,另外还要调整坐标,把你的窗口套在Clip区域上,让人看上去更新区域属于这个窗口…… 多谢 rocks_lee(石子儿) 大哥了我现在明白多了。以前 也问过不少你 DirectDraw 和3D 的问题,多谢了!小弟有礼了。我在北京 你在那里?[email protected][email protected]有空多联系! 哦 你也在北京 干脆哪天我请你吃饭得了,我可是真心的请啊,我在魏公村这片,你呢!我记得还有一个叫snake的家伙,在DIRECT方面也给过我不少帮助,不过可惜 他在南京。 CHTMLVIEW 中如何获取http头信息? 菜鸟求助!!!如何将对话框中的显示数据定时保存至一个文件!!! 求vc第三方界面库 对话框Skin后,使用spy++ 照不到 子控件,这个是怎么回事。 transmitfile在xp中不可以超过650M,在Server版本的windows中无此问题?寻求xp下的解决方案? 请问 LPCSTR PCSTR 有什么区别? 如何让CEdit得到输入焦点 请问如何使窗口在屏幕中显示却在底部任务栏中不现实? 对话框应用程序中怎样使用数据库程序? 关于VC++的几个概念问题? 人才短缺 求助.有人知道FFT的算法吗?
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();
多谢 你这招 我也想过了,可是以现在工程的进度 恐怕是来不及了
to:rocks_lee(石子儿)
怎么实现的,从你的代码上 好象看不出什么东西啊,还是ddx7就支持这样的模式!
能不能解释一下哦!
大哥 能不能 把你的代码 让我看看exe 也行
1, SetCooperativeLevel(m_hWnd, DDSCL_NORMAL), 因为是窗口模式,所以必须用DDSCL_NORMAL协作级,这样不会导致分辨率的变化。
2,要创建Clipper,并用SetHWnd和你的对话框关联起来。
3,主表面总是全屏幕,不过通过第二步,你的绘图指令不会超出裁剪区,但绘图的坐标是相对屏幕主上角的,所以你要和你的客户区坐标进行转换。
我了解你说的这些! 可是我的 我缩小了 主表面,可是结果 没有被画到的地方还是黑的
我不明白这是为什么,我想在那里画点其他的东西,好麻烦啊!如果我把他的COLORKEY 设成黑的 会不会有点作用呢!
这样我想可以:动态创建一个static的子窗口,把它的客户区用作Clip……
一个工程 我 能同时建立 几个主表面啊! 是不是 只能建立一个,然后后备表面到是能建立很多。
to:ZHLMNET(游水去喏!!!!)
不好意思 没有收到 你是发的 [email protected]
你可以这样考虑问题:主表面就是全屏幕,但可以用Clip来保证只有屏幕的一部分被更新,另外还要调整坐标,把你的窗口套在Clip区域上,让人看上去更新区域属于这个窗口……
我现在明白多了。
以前 也问过不少你 DirectDraw 和3D 的问题,多谢了!小弟有礼了。
我在北京 你在那里?
[email protected]
[email protected]
有空多联系!
我记得还有一个叫snake的家伙,在DIRECT方面也给过我不少帮助,不过可惜 他在南京。