游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1537|回复: 1

大家好,我想问问怎样重载Direct的BltFast()函数?

[复制链接]

12

主题

40

帖子

40

积分

注册会员

Rank: 2

积分
40
发表于 2004-7-1 07:53:00 | 显示全部楼层 |阅读模式
我用 Direct,设置了一个全屏幕的窗口,如果我在上面帖图,超出了屏幕,屏幕的右边和下边就帖不满,有人说重载BltFast()函数后,如果RECT(),超出了范围,就回自动进行裁减,请问怎样重载BltFast()函数?

65

主题

225

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
发表于 2004-7-1 13:25:00 | 显示全部楼层

Re:大家好,我想问问怎样重载Direct的BltFast()函数?

你可以从IDirectDrawSurface类中派生一个新类,然后加入一个BltFast函数,这样就可以实现重载,更简单的就是用下面这个函数来代替BltFast函数,这个函数是我随便写的,没测试是否正确。
HRESULT Blt( long x, long y, LPDIRECTDRAWSURFACE7 pdds, RECT* prc ,LPDIRECTDRAWSURFACE7 pddsBackBuffer)
{
        RECT rc=*prc;
        RECT ScreenRect;
        GetClientRect(GetHWnd() ,&ScreenRect);
        //开始栽剪
        if(x<0){rc.left -=x;x=0;}
        if(x+rc.right-rc.left >ScreenRect.right ){rc.right -=x+rc.right-rc.left  -ScreenRect.right ;}
        if(y<0){rc.top -=y;y=0;}
        if(y+rc.bottom-rc.top >ScreenRect.bottom ){rc.bottom -=y+rc.bottom -rc.top -ScreenRect.bottom ;}
           pddsBackBuffer->BltFast( x, y, pdds, &rc, DDBLTFAST_SRCCOLORKEY );
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-2 22:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表