当前位置:首页 » 游戏资讯 » vc游戏编程怎么加入视频

vc游戏编程怎么加入视频

发布时间: 2022-10-01 05:45:29

⑴ 怎么样通过VC实现动画应用

在VC程序中插入微型动画
---- 下面利用CImageList类保存数幅画面,利用Draw函数在一定的时间间隔播放出来,形成了类似GIF动画的效果。该方法可以在Window的客户区内、工具条上、状态条上播放动画。这里还给出了利用SetIcon函数在窗口标题栏上播放动画的方法。

---- (一)、原理

----
在VC中有一个CImageList类可以以图像列表的方式管理图像,图像列表中的图像大小相同,索引以0为开始,每个图像都可以单独引用。Microsoft
的API提供了一系列的函数,您可以利用这些函数创建、销毁图像列表,可以显示图像、增加和删除图像,替代、合并和拖动图像。

---- CImageList 类提供了Windows图像列表通用控件功能。下面对本文用到的函数简要说明如下:
BOOL Create( int cx, int cy, UINT nFlags, int nInitial, intnGrow );

---- 该函数用于创建一个图像列表。 cx,cy
是每个图像的宽度和高度;nFlags是图像列表的类型,其值仅可包含一个ILC_COLOR值。其详细取值参见VC在线帮助。nInitial为图像列表最初含有的图像数目;nGrow为当图像数量需要改变时,每次动态增长的图像数。
BOOL Draw( CDC* pdc, int nImage, POINT pt, UINT nStyle );

---- 该函数用于显示一个图像。pdc为目标设备上下文的指针;nImage为要显示的图像索引;pt为图像显示的位置;nStyle为图像显示风格,详见在线帮助。
HICON ExtractIcon( int nImage );利用该函数可以得到一函数的句柄:int Add( HICON hIcon );该函数把一个图像加入图像列表中。

---- (二)、编程与实现

----
首先,建立图表资源。在VC6.0中利用资源编辑器,建立几幅图表,IDI_ICON1、IDI_ICON2、IDI_ICON3......在编辑图标时选择Custom,将图标设置成大小为64X32。由于Windows的各个部件不完全相同,其实现方法也不完全相同,下面对在窗口不同位置显示动画的方法分别加以介绍。

---- 1. 在View类客户区绘制动画

---- 在类的定义文件中加入下列变量:
POINT pt1;//图像显示的位置int m_Play; //将要显示图像的索引void CreateImageList();//创建图像列表的函数CImageList m_ImageList1;//图像列表对象int m_ImageNumber; //图像列表中图像的总数目首先初始化pt1.m_Play、m_ImageNumber:CImageView::CImageView(){// TODO: add construction code herept1.x =1;pt1.y =1;m_Play=0;m_ImageNumber=0;}CreateImageList()的实现如下:void CImageView::CreateImageList(){m_ImageList1.Create (64,32,ILC_COLOR,5,2);HICON hIcon = ::LoadIcon(AfxGetResource-Handle(),MAKEINTRESOURCE(IDI_ICON1));m_ImageList1.Add(hIcon);m_ImageNumber++;hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2));m_ImageList1.Add(hIcon);m_ImageNumber++;hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3));m_ImageList1.Add(hIcon);m_ImageNumber++;//把您要播放的所有资源加入图像列表。}在OnCreate函数中设置计时器,并创建图像列表:int CImageView::OnCreate(LPCREATESTRUCTlpCreateStruct){if (CView::OnCreate(lpCreateStruct) == -1)return -1;// TODO: Add your specialized creation code hereCreateImageList();SetTimer(1,500,NULL);return 0;}响应ON_TIMER消息,显示动画:void CImageView::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();if(m_Play >m_ImageNumber)m_Play=0;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);m_Play++;ReleaseDC(pDC);CView::OnTimer(nIDEvent);}

---- 最后别忘了在OnDestroy函数中,增加在窗口撤销时中止定时器的代码。

---- 2. 在状态条上显示动画

---- 由于状态条也是窗口,所以也可以在其上显示动画。在CMainFrame类中可以看到下列代码:
protected: // control bar embedded membersCStatusBar m_wndStatusBar;

---- 所以为了在状态条上显示动画,其编程代码应在CMainFrame类中加入。首先创建资源文件和图像列表类,具体方法和代码见View类客户区绘制动画一节,此处不再重复。下面给出ON_TIMER的响应函数:
void CMainFrame::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultif(m_Play >m_ImageNumber)m_Play=0;//如果图画为最后一个,显示第一幅图片CDC *pDC=this- >m_wndStatusBar. GetDC();ASSERT(pDC!=NULL);pt1.x=1;pt1.y =1;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);m_Play++;CFrameWnd::OnTimer(nIDEvent);}

---- 上述代码将在状态条左上方播放动画。

---- 3. 在工具栏上播放动画

---- 由于工具栏的性质与状态条差不多,其播放动画的方法也相似,下面给出ON_TIMER的响应函数:
void CMainFrame::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultif(m_Play >m_ImageNumber)m_Play=0;//如果图画为最后一个,显示第一幅图片CRect rect;CDC *pDC;pDC=this- >m_wndToolBar.GetDC();ASSERT(pDC!=NULL);this- >m_wndToolBar.GetClientRect(&rect);//获得显示有效区域pt1.x =rect.right -64; //将显示位置定在最右边pt1.y=1;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);m_Play++;CFrameWnd::OnTimer(nIDEvent);}

---- 上述代码将在工具栏右上方播放动画。但如仔细观察,动画的位置并不是靠近窗口最右边,这是因为工具栏的窗口有边界,采用如下方法,可以把画面移到窗口右边:
pDC=GetDC ();//获得CMainFrame的画图设备指针ASSERT(pDC!=NULL);this- >GetClientRect(&rect);pt1.x =rect.right-64 ;pt1.y=rect.top+3 ;m_ImageList1.Draw(pDC,m_Play,pt1,ILD_TRANSPARENT);ReleaseDC(pDC);这是因为工具栏占据的位置属于CMainFrame的客户区。

---- 4. 使图标变成动画

---- 在CWnd类中有一个函数:
HICON SetIcon( HICON hIcon, BOOL bBigIcon);可以改变窗口的图标,所以您可以通过使用该函数不断地改变图标使图标动起来,效果像GetRight一样。 在OnTimer函数中加入下列代码:SetIcon(m_ImageList1.ExtractIcon(m_Play),FALSE);

---- 就可以使图标动起来。当然为了使程序工作得更好,您最好重建一套图标资源。

⑵ vc 6.0 如何添加图片组(游戏编程,连续的画面),如何显示

这个还是打包成资源文件比较好。如果只是做小游戏可以作为资源添加到工程的资源中。加载和显示话要看你是用什么做游戏了,D3D,DDRAW(这个微软早就不管了,但还是可以用),GDI都有所不同。比如说GDI吧,这个做大游戏有点勉强,但不用再多进行设置。加载文件可以用LoadImage,显示的话用StretchBlt。这都只是最简单基本的东西,真正要做一个游戏仅凭这些是不够的。最好根据你要用的工具,多参考相关的文档,比如msdn。

⑶ 有关VC游戏编程的几点建议

对于刚刚进入游戏开发领域的初学者,有时候可能会觉得不知道怎样才能掌握游戏开发的知识和技术。其实,绝大多数的游戏开发,更多的是关于对开发过程的基本了解,而很少是如何写复杂的代码。开发者也需要懂得一些游戏开发的窍门。

尽管每个人学习开发的过程会不一样,然而无论如何,系统的学习方法对每个学习者来说都是至关重要的。对于初学者,应该经常向资深的游戏开发者学习,通过他们的直播和视频,学习游戏开发的技巧。你从这些专家们身上学到的东西越多,你就可以越快成为优秀的开发者。

对于“系统的学习方法”,大多数人都不会陌生。但事实上不是人人都可以做得到。即使是那些已经工作了多年的开发者,也会忘记或忽视了一些有用的方法。以下,我们一起来分享10条给游戏开发初学者的建议。

大胆思考,从“小”开始
游戏开发的初学者不要只想着开发那些很牛的游戏,例如Quake和Starcraft。我们鼓励开发者敢于大胆思考,解放自己的思维空间。不过,对于你未来的雄心壮志,最好还是从开发一个小游戏开始,然后再根据你自己的经验循序渐进。
你可以从一个简单的游戏开始你的开发工作,尤其是当你要使用一些新工具来开发游戏的时候,尽量先从简单的游戏开始。例如俄罗斯方块,这个经典的益智游戏具备了一个成功游戏的所有要素。它只有一个游戏循环,只有当用户退出的时候才会结束。它使用了视觉化的功能和动画,变得更有吸引力。另外,它的游戏难度是简单的,但教会了开发者很多东西。所以,先尝试着手开发像俄罗斯方块这样简单的游戏,你会获得全面的学习体验。

反复尝试你自己的游戏
游戏要想成功必须要有趣,它要比高端的图形和故事有趣得多。如果连你自己都无法对自己的游戏产生兴趣,那么没有人会对它感兴趣了。因此,你得反复地尝试这些游戏,即使它们很简单。你可以努力从中找到方法,如何使它们变得更有趣和更令人上瘾。一旦你满意了它们的开发效果,你就可以说服别人来玩你的游戏了。你可以邀请不同的人来玩游戏,从小孩到老人,并观察他们的反应。

如果他们看起来对你的游戏感兴趣,这很好。如果他们没什么兴趣,而且还有不满,那么你就知道你的游戏需要改善了。询问他们的意见,游戏的哪些方面是他们不满意的,并进行必要的调整。

关注其他游戏开发者
目前游戏行业的广泛发展令世界的游戏开发者数量呈爆炸性的增长。因此,要在市场上引起关注是很难的。但这并不是一件坏事,因为你可以与很多专家和同行交流,他们可以帮助你成为一名成功的游戏开发者。
你可以关注一些知名的游戏开发者的直播。例如,在 Livecoding.tv上就集结了不少经验丰富的游戏开发者,他们会直播开发游戏的编码过程,还会提供视频,方便有兴趣的观众进一步了解和学习。

关注新闻
在任何行业,游戏开发的重点取决于目前的趋势。一个特殊类型的游戏可能会在当前的市场环境下受到欢迎,但可能过不了多久,它就被取代了。如果你觉得你的创意是与众不同的,而且是值得你去追求的,那么你不需要虔诚地追随潮流,但是你还是需要留意它们。

现在有许多平台可以让你随时了解在游戏开发领域的趋势和新闻。这些平台包括了Gamasutra 和Board Game Geek。你还可以关注Edge magazine,一个关于游戏开发的电子杂志网站,或者是在Livecoding.tv上那些游戏开发者的直播和视频。

尝试类似的游戏并严谨地评估它们
现在,像Subway Surfers(地铁跑酷)和Candy
Crush(糖果传奇)这些游戏已经完全不是新概念了。它采取了大量很酷的开发工作,把这些通用的游戏概念转变为有数百万美元收入的游戏。这包括了可爱的声音、视觉效果,养眼的界面以及质朴的人物。因此,如果你懂得用正确的方法去设计一个游戏,并且为了设计好它,你会去看其它相似的着名游戏,那么即使只是最简单的游戏,如俄罗斯方块,它也一样可以很出名。
尝试用批判性的思维去评估这些游戏,是什么令它们如此出色,并且尝试把它们的成功之处运用到你的游戏中。它会令事情变得有趣。

尝试,测试,写码
当你能够在开发游戏时同时处理多个工作任务的时候,你将开始想知道成为一名专业游戏开发者是怎样的。如果你有了一个特别的灵感,你应该立即执行它,并测试它。这部分的工作开始得越慢,你就越难在工作计划中变得积极。

尽可能发挥创意
如果没有原创性,游戏开发就没有意义了。因此不要害怕尝试你的疯狂想法,并把它们融入到你的游戏中。你没有必要遵循书本上的具体定律,甚至在游戏环境中,人类本身的认知并不重要,只要它对玩家来说是有趣的。
从不停止学习
在游戏开发中,如果你没有一个永远学习的态度,你不可能成为一个征服所有人的专家。多年来,我们已经看到了有很多游戏开发平台和开发语言出现。游戏开发者不可以避免自己的学习历程可能会有变缓的风险,因此要多关注新闻,在你的游戏中多作尝试和融入新的趋势。它将令你的游戏有一个最新的前景。
把它变成一件日常的事情
游戏开发永远不会突然取得成功,你需要每天勤奋地工作。不要放过每一个机会去玩你的游戏并为它工作,它将成为你的第二天性。如果游戏不有趣,那就注入热情,用天马行空的方法来让它变得是有价值的。如果你不能自我激励地为自己的游戏工作,你有可能在你一生中也无法获得成功。

⑷ 谁做过用vc++编程做视频叠加字幕的么急求!!!

一、任何一种语言之所以能够存在,它必定有它可取的地方,同时语言之所以需要发展,也说明任何语言都是有自己的劣势的。我常常在网上,特别是一些大学的论坛上见到关于BCB与VC谁优谁劣,C#会不会取代C++这种论题,而常常这种话题是最热门的话题。我没有资格去评价这种现象,但是我是从来不参与这种讨论的。因为我觉得这种讨论没有任何意义!每种语言之所以能成为一种语言,它必然有它的可取之处。比如说,BASIC语言的简便易学,C语言的简洁高效,C++语言的功能强大。但是如果你是初学计算机语言,我却会建议你去学Pascal,为什么?因为它的结构严谨。要培养严谨的编程习惯,它可能是最好的了。 二、每个人学习的目的不一样,可以选择的学习对象会不一样的。如果您是想做一些小程序的开发,我觉得VB是很好的。简便易学。如果您要做的是大项目的开发,VC和BCB都是比较适合的。如果您有C或C++语言的背景,也许您会喜欢BCB。但是如果您要做UNIX下的软件开发,可能C和C++还是首要的选择。因此,根本就没有一种统一标准来衡量哪种语言是好的,我觉得只要是适合您的语言就是好的。 三、任何一门语言,入门是很简单的,但是要想能真正达到实用,能够写出好的程序是需要花很多时间的。没有速成法,没有捷径。对于VB或BCB等一类RAD工具来说,要想入门,大概一个星期差不多了吧。但是,如果您想做的是软件开发,可能不是一两个星期能解决问题的。 四、软件并不仅仅是代码。要想开发出好的软件,还有其他别的知识是必需要掌握的,特别是软件工程的东西。现在由于有好些人员对于软件开发总是认为,能写出代码就算完成了开发,他们认为软件就是写代码。但是事实并不是这样。 五、为了真正学好一门语言,学一些与此相关的知识我觉得是很有必要的。比如您想要学习Java,如果您学习一些面向对象的知识绝对有助于您对于这门语言的理解。如果您能学习一些标准C++方面的知识对于您学习VC或者BCB都绝对是有好处的。 六、对于一个编程入门者来说,选择一门容易上手的工具可能是最好的,因为对于初学者来说,树立信心可能比编程本身更来的重要。VB和BCB可能是最好的选择。VB和BCB有一个共同的特点就是上手容易。但是要清楚的是,容易上手并不代表它很容易驾驭,要真正精通一门语言绝对不是一件很简单的事。 七、语言的学习不可过于功利。我想我说这句话可能得冒被拍的危险,但是我还是要说的。有些朋友说,想学一门很容易掌握的语言以便于好找工作的。还有的朋友说,想学能够适应社会形势的(我都有点没搞懂他这句话是指什么)。但是,我要说,如果您已经到了必须找一份工作来准备明天的早饭的话,我劝你还是做点别的吧。软件的开发并不是一朝一夕的事。 目前,流行的计算机语言非常多,如 VB、VC++、Vfp、Delphi、C++Builder、J++Builder、PB、Perl、ASP、PHP、JSP、Java、JavaScript、VbScript、C#、ASP+、HTML、XML、CSS 等等,已经不像 5 年前只有 Basic、Pascle、Turbo C、Fortran、Coble、Foxpro 等容易让人选择,而且新的语言还在不断出现。那么,如果你打算投身计算机这个行业,你准备学习哪门语言呢? 要选择什么语言,应根据你的从业方向,还有你以往的语言基础来决定。如果你打算从事数据库方面的编程,那么 PB、VB、Delphi、Vfp 可以选择,当然 PB 是首选;如果你打算从事网络(非网站)编程,那么可以选择 VC++、C++Builder、Delphi 等语言,笔者推荐 C++Builder 语言,它具有 Delphi 容易上手、使用简单的优点,又能为你参加考试做好准备,因为现在计算机考试的标准语言是 C 语言。当然现在许多程序员以能够操控 VC++ 为荣耀,甚至认为只有使用 VC++ 的程序员才是程序员,你怎么看是你自己的事了。如果你打算从事网站编程,那么 HTML、ASP、PHP、JSP、XML、Javascript 等不能不学,笔者的经验是先学 HTML、ASP、Javascript 等,再过度到 XML、JSP 等。 以上是考虑从业的需要。如果你原来已经对 VB 有相当的了解(许多人开始学习计算机是从 VB 起步的),那么,不要轻言放弃,VB 在数据库、多媒体等方面功能并不逊色,况且有大量的优秀软件是用 VB 开发的,微软的许多开发应用中都有 VB 的影子。而且今天的 VB 已经是今非昔比了,它已经具备了开发网络应用、系统程序的能力,而且微软还在加强它的功能。当然,如果你对 C/C++ 非常熟悉,那么你学习 JavaScript、Java、JSP、C# 将会顺手得多。 笔者再谈一下语言的“尊卑贵贱”问题。现在在一些人的意识里,确有这种心理:越难学的语言其“含金量”越高。笔者曾在 Internet 上听人传闻“现在 Java 的年薪是 5 万元。”这样以来,像 VB 这种曾经为计算机的发展作出过巨大贡献的语言,就遭到一些企业的轻视,有人把 VB 称为“业余”语言,言下之意,VB 只配老百姓在茶余饭后“玩玩”。相应的是,一些想成为“程序员”的人,拼命嚼着 VC++ 的 MFC 和类、封装、继承等一些古怪的字眼,并以此为莫大的荣耀,认为已经接近了计算机的“真谛”。 而事实的真相是怎样的呢?微软的享誉世界的字处理软件 Word 是用 VB 开发的;微软的 ASP、宏语言等都是 VB 的子集。由此可以看出 VB 的功能是何等的强大!最终用户实际使用的是成型的软件,是软件给他们的工作、生活带来的效率和乐趣,他们在购买和使用软件的时候不会看它是不是用 C 语言制作的。某些企业只所以在招聘员工的时候强调要熟悉 VC++、Delphi、PB,只是为了向外界表明它的某种“档次”,实际上含有商业攀比和广告、公关的成分。

⑸ vc6.0小游戏编程过程

建议你去看下关于VC工具第一节课的视频(VC工具如何使用)

⑹ 求vc中游戏编程的详细步骤

#include "CDDraw.h"

typedef struct _DISPLAYMODE {
DDSURFACEDESC2 * pddsdMode;
DWORD dwNumMode;
}DISPLAYMODE;

DISPLAYMODE dmModes;

static HRESULT WINAPI ModeEnumRecord( DDSURFACEDESC2 * pNewMode,
VOID * pRecordInfo );
static BOOL WINAPI DDisplayEnumerate( GUID * pGUID,
LPSTR ,
LPSTR ,
LPVOID , HMONITOR );
/****************************************
* 函数名: CDDraw(...)
* 功能: 构造函数
* 版权所有 mochsh, 2004
*****************************************/
CDDraw::CDDraw()
{
//初始化变量
hWnd = NULL;
bFullScr = TRUE;
ScreenW = 640;
ScreenH = 480;
ScreenC = 16;
lpDD = NULL;
lpDDSPrimary = NULL;
lpDDSBack = NULL;
}

/****************************************
* 函数名: ~CDDraw()
* 功能: 析构函数
* 版权所有 mochsh, 2003
*****************************************/
CDDraw::~CDDraw()
{
if(lpDD!=NULL){
if(lpDDSBack!=NULL){
lpDDSBack->Release();
lpDDSBack = NULL;
}
if(lpDDSPrimary!=NULL){
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}
lpDD->Release();
lpDD = NULL;
}
}

/**************************************************
* 函数名: InitDDraw(...)
* 功能: 初始化DDraw,并且创建主表面和翻转缓冲表面
* 版权所有 mochsh, 2003
***************************************************/
BOOL CDDraw::InitDDraw(HWND hWd,
BOOL bFScr,
DWORD ScrW,DWORD ScrH,
DWORD BitCount )
{
//--------------------------按给出的条件初始化变量
hWnd=hWd;
bFullScr=bFScr;
if(bFScr){//全屏模式
if(ScrW <= 640) { ScreenW = 640; ScreenH = 480; }
else if(ScrW <= 800){ ScreenW = 800; ScreenH = 600; }
else if(ScrW > 800) { ScreenW = 1024; ScreenH = 768; }
else {ScreenW=800; ScreenH = 600;}
if(BitCount<=8) ScreenC = 8;
else if(BitCount<=16)ScreenC = 16;
else if(BitCount<=24)ScreenC = 24;
else if(BitCount<=32)ScreenC = 32;
else ScreenC=16;

//检查模式是否有效
CheckDisplayMode();
}
else{//窗口模式
ScreenW=ScrW;
ScreenH=ScrH;
}

//--------------------------初始化DirectDraw环境
HRESULT ddrval;
//创建DirectDraw对象
ddrval = DirectDrawCreateEx(NULL,(void **) &lpDD,IID_IDirectDraw7,NULL);
if( FAILED(ddrval) ) {
//创建DirectDraw对象出错时进到这里来
//在这里可以记录创建DirectDraw对象的出错信息
return FALSE;
}
//******全屏模式***********//
if( bFullScr ){
//设置协作等级
ddrval = lpDD->SetCooperativeLevel( hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT );
if( FAILED( ddrval )){
//设置协作等级出错时进到这里来
//在这里可以记录设置协作等级的出错信息
return FALSE;
}

//设置显示模式
ddrval = lpDD->SetDisplayMode( ScreenW,ScreenH,ScreenC,NULL,NULL);
if( FAILED( ddrval ) ){
//设置显示模式出错时进到这里来
//在这里可以记录设置显示模式的出错信息
return FALSE;
}

//创建主表面
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
DDSCAPS_FLIP |
DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
if (ddrval!=DD_OK) {
//创建主表面出错时进到这里来
//在这里可以记录创建主表面的出错信息
return FALSE;
}

//创建后台缓冲表面
DDSCAPS2 ddscaps;
ZeroMemory(&ddscaps,sizeof(ddscaps));
ddscaps.dwCaps=DDSCAPS_BACKBUFFER;
ddrval=lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);
if (ddrval!=DD_OK) {
//获取后台缓冲表面出错时进到这里来
//在这里可以记录后台缓冲表面的出错信息
return FALSE;
}
return TRUE;
}
//******窗口模式***********//
else{
//设置协作等级
ddrval=(HRESULT)lpDD->SetCooperativeLevel( hWnd, DDSCL_NORMAL );

//创建主表面
DDSURFACEDESC2 ddsd;
ZeroMemory( &ddsd, sizeof(ddsd) );
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
//创建主表面,并取得指向主表面的指针lpDDSPrimary
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
if( FAILED( ddrval )){
//创建主表面出错时进到这里来
//在这里可以记录创建主表面的出错信息
return FALSE;
}

//使用裁剪器
UseClipper();

//创建后台缓冲表面
//:::::::ddsd前面已经声明
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT |DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
ddsd.dwWidth = ScreenW;//宽的分辨率
ddsd.dwHeight = ScreenH;//高的分辨率
//创建一后台缓冲表面
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSBack, NULL );
if( FAILED( ddrval )){
//创建后台缓冲表面出错时进到这里来
//在这里可以记录创建后台缓冲表面的出错信息
return FALSE;
}
}

return TRUE;
//--------------------------初始化DirectDraw环境完成
}

/**************************************************
* 函数名: Flip(...)
* 功能: 翻转表面==>显示
* 版权所有 mochsh, 2003
***************************************************/
void CDDraw::Flip( LPRECT pRectWin )
{
HRESULT ddrval=1;

if( lpDDSPrimary && lpDDSBack )
{
//检查表面是否丢失
if (lpDDSPrimary->IsLost()==DDERR_SURFACELOST)
lpDDSPrimary->Restore();
if (lpDDSBack->IsLost()==DDERR_SURFACELOST)
lpDDSBack->Restore();
do{
if(bFullScr==1)
ddrval = lpDDSPrimary->Flip( NULL, DDFLIP_WAIT );
else
ddrval = lpDDSPrimary->Blt( pRectWin,lpDDSBack,NULL,DDBLT_WAIT,NULL);

//翻转表面后的信息检测
if( ddrval == DD_OK )
break;
else if( ddrval == DDERR_SURFACELOST ){
if( FAILED(lpDDSBack->Restore()) )
break;
if( FAILED(lpDDSPrimary->Restore()) )
break;
}
else if( ddrval != DDERR_WASSTILLDRAWING )
break;
}while( 1 );
}
}

/**********************************************
* 函数名: UseClipper(...)
* 功能: 创建一个裁剪器,并将它附于主表面
* 版权所有 mochsh, 2003
***********************************************/
HRESULT CDDraw::UseClipper( void )
{
HRESULT ddrval;
LPDIRECTDRAWCLIPPER lpClipper = NULL;

//创建一个剪裁器对象
ddrval = lpDD->CreateClipper(0, &lpClipper, NULL);
if ( ddrval != DD_OK){
//调用CreateClipper创建剪裁器对象出错进到这来
//在这里可以记录出错信息
return ddrval;
}

//将裁剪器设置为hWnd指向的窗口的客户区的范围
ddrval = lpClipper->SetHWnd(0, hWnd);
if ( ddrval != DD_OK){
//调用SetHWnd设置窗口句柄出错进到这来
//在这里可以记录出错信息
return ddrval;
}

//将裁剪器附于主表面
ddrval = lpDDSPrimary->SetClipper(lpClipper);
if ( ddrval != DD_OK){
//将裁剪器附于主表面出错进到这来
//在这里可以记录出错信息
return ddrval;
}

//主表面已经自动增加了裁剪器的索引值,所以应将它释放
if( lpClipper != NULL ) {
lpClipper -> Release();
lpClipper = NULL;
}

return DD_OK;
}
/**********************************************
* 函数名: LoadBMPSurface(...)
* 功能: 将BitmapFile指定的位图
* 格式图像载入刚刚Surf指向的表面
* 版权所有 mochsh, 2003
***********************************************/
BOOL CDDraw::LoadBMPSurface(LPDIRECTDRAWSURFACE7 &lpSurf, //要载入图像的表面指针
LPCSTR BitmapFile )//源图像的路径
{
HDC hdcImage;
HDC hdc;
HBITMAP hbm;
BITMAP bm;
HRESULT ddrval;

if( lpSurf == NULL )
return FALSE;
// 将位图作为文件来读取
hbm = (HBITMAP)LoadImage(NULL,
BitmapFile,
IMAGE_BITMAP,
0, 0,
LR_LOADFROMFILE |
LR_CREATEDIBSECTION);
if (hbm == NULL){
//载入图像失败时进到这里来
//在这里可以记录载入图像失败的信息
return FALSE;
}
//函数功能:创建一个与指定设备兼容的内存设备上下文环境(Device Context)
//创建一个与应用程序的当前显示器兼容的内存设备上下文环境
hdcImage = CreateCompatibleDC(NULL);
if (!hdcImage){
//创建设备上下文出错
return FALSE;
}
//选择位图对象到刚刚创建的内存设备上下文环境(DC)
SelectObject(hdcImage, hbm);

//获取位图宽与高
GetObject(hbm, sizeof(bm), &bm);

//获取表面的宽与高
DDSURFACEDESC2 ddsd;
ddsd.dwSize = sizeof(ddsd);
lpSurf->GetSurfaceDesc(&ddsd);
if( BitmapFile!=NULL )
{
if ((ddrval = lpSurf->GetDC(&hdc)) == DD_OK)
{
//将源位图复制到表面,可以进行拉伸或收缩
StretchBlt( hdc,
0, 0, ddsd.dwWidth, ddsd.dwHeight,
hdcImage,
0, 0, bm.bmWidth, bm.bmHeight,
SRCCOPY);
lpSurf->ReleaseDC(hdc);
}
}

DeleteDC(hdcImage);

if( ddrval != DD_OK ) {
//复制矩形块失败
return FALSE;
}

return TRUE;
}
return hr;

}

初始化设备,放不下,没给全。

⑺ 请问怎样在VC++ MFC 对话框中打开视频 新手谢谢啊

对话框资源设计时,这个框多大,如何布局,用哪个控件,都由自己安排。
大篇文字,例如你要写一大段帮助信息,你用静态字也可以。用Text Area 也可以。
对话框 也是一个 window, 与程序生成的别的窗体一样,一大篇文字,也可以临时写入,就像浏览器窗,编辑窗一样,看你怎么设计。

⑻ c++游戏开发,求学习方法和教程/书籍/视频

学习编程最重要的是有恒心,多积累经验,多自己尝试编些东西,
钱能. C++程序设计教程. 第一版.清华大学出版社
然后再学一下VC++,再自己试着多编一些东西,编程最重要的是积累经验。

Visual C++游戏编程人员至少要会的:
c++语言的语法,标准库
会使用VC,
了解DirectX编程.
下面的多多益善:
软件工程,会用某个源代码管理工具(VSS SVN什么的)
数据结构和算法,游戏编程对效率比较关心。
英语, 许多好的资料都是英文的。
经验, 这个最重要。

再给你介绍一些网站能找c++游戏编程的资料:

游戏制作人的网络平台www.gameres.com
中国网游研发中心www.ogdev.net
购买游戏编程书籍的专业网站www.dearbook.com

http://..com/question/4986190.html?si=10
学一个月,可以用VC写一些小程序自己玩玩
学两个月,可以用VC写像样点的东西在周围人面前炫炫
学三个月,可以用VC给老板开始干活了
学六个月,开始重头去学C++
学一年后,决定要不要继续,if(继续) 学习MFC、ATL、STL、C#、BCB、Network、Databa
se、Algorithm... else开始就是个错误
学三年后,学会怎么来用编程语言来解决问题,VC、BCB等都只是解决问题的工具。这时候
你如果还在学C++,你可以从事软件开发这个很有“前途”的职业了

热点内容
绝地求生未来之役比赛为什么进不去 发布:2023-08-31 22:07:08 浏览:1437
dota2位置什么意思 发布:2023-08-31 22:00:04 浏览:871
lol电竞是什么样子 发布:2023-08-31 21:58:40 浏览:1331
绝地求生八倍镜的那个圆圈怎么弄 发布:2023-08-31 21:58:31 浏览:1419
lol龙龟一个多少金币 发布:2023-08-31 21:55:07 浏览:781
王者如何改游戏内名称 发布:2023-08-31 21:55:06 浏览:1070
游戏主播打广告是什么意思 发布:2023-08-31 21:55:06 浏览:1760
绝地求生如何免费拿到ss7赛季手册 发布:2023-08-31 21:52:13 浏览:951
pgg是哪个国家的战队lol 发布:2023-08-31 21:52:07 浏览:831
一个人的时候才发现游戏很没意思 发布:2023-08-31 21:49:24 浏览:1465