DirectDraw学习:第一课
来源:互联网 发布:c语言能做界面吗 编辑:程序博客网 时间:2024/05/16 08:09
早就听说DirectDraw的大名,以前学习Windows游戏编程大师技巧的时候,也接触过这些东西,但是后来有用其他原因放起学习,现在想重新学习DirectDraw,这个部件是DirectX中在早期很有用的,现在由于3D大行其道,DirectDraw 也被整合了。 废话不多说了。
第一课,很简单,就是了解下DirectDraw的使用步骤。 其实这是大多数的库使用的必须步骤。
第一步: 就是初始化DirectDraw接口,无非就是DirectDrawCreate()函数。 创建了ddraw之后就要设置起协作模式,显示模式。
函数:SetCooperativeLevel().设置协作模式,全屏,独占等设置。 SetDisplyMode()设置显示模式 分辨率,颜色质量。
第二步:初始化显示页面对象。通过CreateSurface() 函数创建一个页面对象。 参数需要一个页面描述对象。
第三步: 就做相关的操作。
第四步: 释放对象。 DDraw 与DDrawSurface.
// 第一步
DDSURFACEDESC ddsd;
HDC hdc;
if (DirectDrawCreate(NULL,&lpDD,NULL)!= DD_OK)
{
return FALSE;
}
if (lpDD->SetCooperativeLevel(GetActiveWindow(),DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN) != DD_OK)
{
return FALSE;
}
if (lpDD->SetDisplayMode(1024,768,32) != DD_OK)
{
MessageBox(GetActiveWindow(),"DisplayMode","Error",MB_OK);
return false;
}
//第二步
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
if(lpDD->CreateSurface(&ddsd,&lpDDPrimary,NULL) != DD_OK) return false;
//第四步
if (lpDD!=NULL)
{
if (lpDDPrimary!= NULL)
{
lpDDPrimary->Release();
lpDDPrimary=NULL;
}
lpDD->Release();
lpDD=NULL;
}
DirectDraw的大致使用步骤么就是这样。
我在写代码的时候,遇到一个问题,就是如果你在创建页面的位置 通过得到DC句柄,然后输出文字,运行程序的时候。会一闪而过。
if(lpDDPrimary->GetDC(&hdc) != DD_OK) return false;
SetBkColor(hdc,RGB(255,0,0));
SetTextColor(hdc,RGB(255,255,255));
TextOut(hdc,0,0,"Hello World!",strlen("Hello World!")+1);
TextOut(hdc,0,100,"PressDown ESC,you can exit.",strlen("PressDown ESC,you can exit.")+1);
lpDDPrimary->ReleaseDC(hdc);
这段代码是利用DirectDraw得到一个DC,通过DC来绘制文字,不过这貌似是GDI的方法咯。
以上的代码最好放在消息循环中,否则会出现绘制出的文字被系统重绘,我试过用invalidateRect()函数禁止一个区域重绘,不过好像也不行。 只有将起放在循环中,就不会呗覆盖。 就说这么多了。
上面的DirectDraw版本很低的,刚刚发现如果使用DirectDraw高版本的时候,同样的代码有个错误,就是使用ddsd结构的时候,必须要用memset初始化 ddsd结构。 memset(&ddsd,0,sizeof(ddsd));
要不然高版本创建显示表面会失败。 不知道具体原因。版本高了,微软改了些东西把。
- DirectDraw学习:第一课
- 学习directdraw
- 学习DirectDraw日志
- DirectDraw学习总结
- 学习DirectSound~~~DirectDraw~~~中
- directdraw 学习总结
- DirectDraw学习笔记
- 写DIRECTDRAW中的第一个例子
- DirectDraw
- DirectDraw
- DirectDraw 学习手记(一)
- [转]从头开始学习DirectDraw
- DirectDraw学习篇--GDI与DirectDraw的关系
- DirectDraw的学习笔记(1)
- DirectDraw的学习笔记(3)
- DirectDraw的学习笔记(4)
- DirectDraw的学习笔记(5)
- 视频播放器制作学习(DirectDraw DirectShow)
- 关于string类的find()一系列函数
- C++ string之unique(),erase(),sort()使用小记
- 如何从Eclipse导入github上的项目源码
- 2014年最热门的国人开发开源软件TOP100
- Ogre+Code::Block配置
- DirectDraw学习:第一课
- DirectDraw双缓冲技术,一个小问题。
- 双向链表的插入算法
- DirectDraw创建窗口程序的注意事项
- DirectDraw关于blt的一些注意事项
- 搜索二叉树的实现
- Boost之内存池学习
- VC下加载JPG/GIF/PNG图片的两种方法(转)
- CButtonST详细介绍