DirectDraw牛人 救命啊!!!

Robert2001 2001-12-17 10:57:06
我怎么在一个DLG 中间的一部分 进行DirectDraw的贴图呢!
我现在的工程整个DLG的客户区全变成了黑色,我怎么能不让他们全成黑的,只是其中的一部分是黑的。换种说法,就是我怎么能让 主表面不充满整个客户区呢,不过这个主表面的大小应该还是按比例可变的! 谁知道怎么解决这样的问题,帮忙了!!
...全文
253 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Robert2001 2001-12-20
  • 打赏
  • 举报
回复
哦 你也在北京 干脆哪天我请你吃饭得了,我可是真心的请啊,我在魏公村这片,你呢!
我记得还有一个叫snake的家伙,在DIRECT方面也给过我不少帮助,不过可惜 他在南京。
Robert2001 2001-12-19
  • 打赏
  • 举报
回复
哎呀 我已经新建了一个窗口了 可是为什么画不上去呢!!!
rockswang 2001-12-19
  • 打赏
  • 举报
回复
对了,我也在北京,以后有空多交流^_^
rockswang 2001-12-19
  • 打赏
  • 举报
回复
不客气不客气^_^

我的:
http://wannaplay.51.net
rocks_lee@263.net
QQ: 17219193
Robert2001 2001-12-19
  • 打赏
  • 举报
回复
多谢 rocks_lee(石子儿) 大哥了
我现在明白多了。
以前 也问过不少你 DirectDraw 和3D 的问题,多谢了!小弟有礼了。
我在北京 你在那里?
t.ye@263.net
tian_ye@v2tech.com
有空多联系!
rockswang 2001-12-19
  • 打赏
  • 举报
回复
主表面只能有一个,绘图的坐标是相对屏幕左上角的。
你可以这样考虑问题:主表面就是全屏幕,但可以用Clip来保证只有屏幕的一部分被更新,另外还要调整坐标,把你的窗口套在Clip区域上,让人看上去更新区域属于这个窗口……

Robert2001 2001-12-19
  • 打赏
  • 举报
回复
to:rocks_lee(石子儿)
一个工程 我 能同时建立 几个主表面啊! 是不是 只能建立一个,然后后备表面到是能建立很多。
to:ZHLMNET(游水去喏!!!!) 
不好意思 没有收到 你是发的 t.ye@263.net
Robert2001 2001-12-18
  • 打赏
  • 举报
回复
to:rocks_lee(石子儿)
我了解你说的这些! 可是我的 我缩小了 主表面,可是结果 没有被画到的地方还是黑的
我不明白这是为什么,我想在那里画点其他的东西,好麻烦啊!如果我把他的COLORKEY 设成黑的 会不会有点作用呢!
Robert2001 2001-12-18
  • 打赏
  • 举报
回复
t.ye@263.net多谢了
rockswang 2001-12-18
  • 打赏
  • 举报
回复
要注意的几点:
1, SetCooperativeLevel(m_hWnd, DDSCL_NORMAL), 因为是窗口模式,所以必须用DDSCL_NORMAL协作级,这样不会导致分辨率的变化。
2,要创建Clipper,并用SetHWnd和你的对话框关联起来。
3,主表面总是全屏幕,不过通过第二步,你的绘图指令不会超出裁剪区,但绘图的坐标是相对屏幕主上角的,所以你要和你的客户区坐标进行转换。
Robert2001 2001-12-18
  • 打赏
  • 举报
回复
to:rocks_lee(石子儿)
大哥 能不能 把你的代码 让我看看exe 也行
Robert2001 2001-12-18
  • 打赏
  • 举报
回复
to:lanzhengpeng2(兰征鹏)
多谢 你这招 我也想过了,可是以现在工程的进度 恐怕是来不及了
to:rocks_lee(石子儿)
怎么实现的,从你的代码上 好象看不出什么东西啊,还是ddx7就支持这样的模式!
能不能解释一下哦!
rockswang 2001-12-18
  • 打赏
  • 举报
回复
我的代码的节选,保证可以工作。

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();

ZHLMNET 2001-12-18
  • 打赏
  • 举报
回复
u p
ZHLMNET 2001-12-18
  • 打赏
  • 举报
回复
已经发了,收一下把
ZHLMNET 2001-12-18
  • 打赏
  • 举报
回复
我有一个写好的,把你的EMAIL留下,我发给你
rockswang 2001-12-18
  • 打赏
  • 举报
回复
哦,会错意了……
这样我想可以:动态创建一个static的子窗口,把它的客户区用作Clip……
lanzhengpeng2 2001-12-17
  • 打赏
  • 举报
回复
窗口模式,在需要绘制的区域设子窗口,并把子窗口的句柄设成DirectDraw的句柄
xtky_limi 2001-12-17
  • 打赏
  • 举报
回复
推!!!!!!!!1

16,551

社区成员

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

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

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