问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在windows xp embedded 怎么用c语言实现开关中显示器

发布网友 发布时间:2022-09-03 07:42

我来回答

1个回答

热心网友 时间:2024-10-13 21:05

二、生成OpenGL程序的基本步骤和条件  本文将给出一个例子,这个例子是一个用OpenGL显示图像的Windows程序,通过这个程序我们也可以知道用OpenGL编程的基本要求。我们知道,GDI是通过设备句柄(DeviceContext以下简称"DC")来绘图,而OpenGL则需要绘制环境(RenderingContext,以下简称"RC")。每一个GDI命令需要传给它一个DC,与GDI不同,OpenGL使用当前绘制环境(RC)。一旦在一个线程中指定了一个当前RC,所有在此线程中的OpenGL命令都使用相同的当前RC。虽然在单一窗口中可以使用多个RC,但在单一线程中只有一个当前RC。本例将首先产生一个OpenGLRC并使之成为当前RC,分为三个步骤:设置窗口像素格式;产生RC;设置为当前RC。  一、首先创建工程  用AppWizard产生一个EXE文件,选择工程目录,并在工程名字中输入"GLSample一",保持其他的不变;第一步、选单文档(SDI);第二步、不支持数据库;第三步、不支持OLE;第四步、不选中浮动工具条、开始状态条、打印和预览支持、帮助支持的复选框(选中也可以,本文只是说明最小要求),选中三维控制(三DControls);第五步、选中产生源文件注释并使用MFC为共享动态库;第六步、保持缺省选择。按Finish结束,工程创建完毕。  二、将此工程所需的OpenGL文件和库加入到工程中  在工程菜单中,选择"Build"下的"Settings"项。单击"Link"标签,选择"General"目录,在Object/LibraryMoles的编辑框中输入"OpenGL三二.libglu三二.libglaux.lib"(注意,输入双引号中的内容,各个库用空格分开;否则会出现链接错误),选择"OK"结束。然后打开文件"stdafx.h",将下列语句插入到文件中(划下划线的语句为所加语句):  #defineVC_EXTRALEAN//Excluderarely-usedstufffromWindowsheaders  #include//MFCcoreandstandardcomponents  #include//MFCextensions  #include  #include  #ifndef_AFX_NO_AFXCMN_SUPPORT  #include//MFCsupportforWindows95CommonControls  #endif//_AFX_NO_AFXCMN_SUPPORT  三、改写OnPreCreate函数并给视类添加成员函数和成员变量  OpenGL需要窗口加上WS_CLIPCHILDREN(创建父窗口使用的Windows风格,用于重绘时裁剪子窗口所覆盖的区域)和WS_CLIPSIBLINGS(创建子窗口使用的Windows风格,用于重绘时剪裁其他子窗口所覆盖的区域)风格。把OnPreCreate改写成如下所示:  BOOLCGLSample一View::PreCr-eateWindow(CREATESTRUCT&cs)  {  cs.style|=(WS_CLIPCHI-LDREN|WS_CLIPSIBLINGS);  returnCView::PreCreate-Window(cs);  }  产生一个RC的第一步是定义窗口的像素格式。像素格式决定窗口着所显示的图形在内存中是如何表示的。由像素格式控制的参数包括:颜色深度、缓冲模式和所支持的绘画接口。在下面将有对这些参数的设置。我们先在CGLSample一View的类中添加一个保护型的成员函数BOOLSetWindowPixel-Format(HDChDC)(用鼠标右键添加),并编辑其中的代码,见程序一。  BOOLCGLSample一View::SetWindowPixelFormat(HDChDC)  {  PIXELFORMATDESCRIPTORpixelDesc;  pixelDesc.nSize=sizeof(PIXELFORMATDESCRIPTOR);  pixelDesc.nVersion=一;  pixelDesc.dwFlags=PFD_DRAW_TO_WINDOW|  PFD_DRAW_TO_BITMAP|  PFD_SUPPORT_OpenGL|  PFD_SUPPORT_GDI|  PFD_STEREO_DONTCARE;  pixelDesc.iPixelType=PFD_TYPE_RGBA;  pixelDesc.cColorBits=三二;  pixelDesc.cRedBits=吧;  pixelDesc.cRedShift=一陆;  pixelDesc.cGreenBits=吧;  pixelDesc.cGreenShift=吧;  pixelDesc.cBlueBits=吧;  pixelDesc.cBlueShift=0;  pixelDesc.cAlphaBits=0;  pixelDesc.cAlphaShift=0;  pixelDesc.cAccumBits=陆四;  pixelDesc.cAccumRedBits=一陆;  pixelDesc.cAccumGreenBits=一陆;  pixelDesc.cAccumBlueBits=一陆;  pixelDesc.cAccumAlphaBits=0;  pixelDesc.cDepthBits=三二;  pixelDesc.cStencilBits=吧;  pixelDesc.cAuxBuffers=0;  pixelDesc.iLayerType=PFD_MAIN_PLANE;  pixelDesc.bReserved=0;  pixelDesc.dwLayerMask=0;  pixelDesc.dwVisibleMask=0;  pixelDesc.dwDamageMask=0;    m_GLPixelIndex=ChoosePixelFormat(hDC,&pixelDesc);  if(m_GLPixelIndex==0)//Letschooseadefaultindex.  {m_GLPixelIndex=一;  if(DescribePixelFormat(hDC,m_GLPixelIndex,  sizeof(PIXELFORMATDESCRIPTOR),&pixelDesc)==0)  {returnFALSE;  }  }  if(SetPixelFormat(hDC,m_GLPixelIndex,&pixelDesc)==FALSE)  {returnFALSE;  }  returnTRUE;  }  接着用鼠标右键在CGLSample一View中添加保护型的成员变量:  intm_GLPixelIndex;  四、用ClassWizard添加WM_CREATE的消息处理函数OnCreate  添加OnCreate函数后如程序一所示。  至此,OpenGL工程的基本框架就建好了。但如果你现在运行此工程,则它与一般的MFC程序看起来没有什么两样。  5、代码解释  现在我们可以看一看Describe-PixelFormat提供有哪几种像素格式,并对代码进行一些解释:  PIXELFORMATDESCRIPTOR包括了定义像素格式的全部信息。  DWFlags定义了与像素格式兼容的设备和接口。  通常的OpenGL发行版本并不包括所有的标志(flag)。wFlags能接收以下标志:  PFD_DRAW_TO_WINDOW使之能在窗口或者其他设备窗口画图;  PFD_DRAW_TO_BITMAP使之能在内存中的位图画图;  PFD_SUPPORT_GDI使之能调用GDI函数(注:如果指定了PFD_DOUBLEBUFFER,这个选项将无效);  PFD_SUPPORT_OpenGL使之能调用OpenGL函数;  PFD_GENERIC_FORMAT假如这种象素格式由WindowsGDI函数库或由第三方硬件设备驱动程序支持,则需指定这一项;  PFD_NEED_PALETTE告诉缓冲区是否需要调色板,本程序假设颜色是使用二四或三二位色,并且不会覆盖调色板;  PFD_NEED_SYSTEM_PALETTE这个标志指明缓冲区是否把系统调色板当作它自身调色板的一部分;  PFD_DOUBLEBUFFER指明使用了双缓冲区(注:GDI不能在使用了双缓冲区的窗口中画图);  PFD_STEREO指明左、右缓冲区是否按立体图像来组织。  PixelType定义显示颜色的方法。PFD_TYPE_RGBA意味着每一位(bit)组代表着红、绿、蓝各分量的值。PFD_TYPE_COLORINDEX意味着每一位组代表着在彩色查找表中的索引值。本例都是采用了PFD_TYPE_RGBA方式。  ●cColorBits定义了指定一个颜色的位数。对RGBA来说,位数是在颜色中红、绿、蓝各分量所占的位数。对颜色的索引值来说,指的是表中的颜色数。  ●cRedBits、cGreenBits、cBlue-Bits、cAlphaBits用来表明各相应分量所使用的位数。  ●cRedShift、cGreenShift、cBlue-Shift、cAlphaShift用来表明各分量从颜色开始的偏移量所占的位数。  一旦初始化完我们的结构,我们就想知道与要求最相近的系统象素格式。我们可以这样做:    m_hGLPixelIndex=ChoosePixelFormat(hDC,&pixelDesc);    ChoosePixelFormat接受两个参数:一个是hDc,另一个是一个指向PIXELFORMATDESCRIPTOR结构的指针&pixelDesc;该函数返回此像素格式的索引值。如果返回0则表示失败。假如函数失败,我们只是把索引值设为一并用DescribePixelFormat得到像素格式描述。假如你申请一个没得到支持的像素格式,则Choose-PixelFormat将会返回与你要求的像素格式最接近的一个值。一旦我们得到一个像素格式的索引值和相应的描述,我们就可以调用SetPixelFormat设置像素格式,并且只需设置一次。  现在像素格式已经设定,我们下一步工作是产生绘制环境(RC)并使之成为当前绘制环境。在CGLSample一View中加入一个保护型的成员函数BOOLCreateViewGLContext(HDChDC),使之如下所示:  BOOLCGLSample一View::CreateViewGLContext(HDChDC)  {m_hGLContext=wglCreateContext(hDC);//用当前DC产生绘制环境(RC)  if(m_hGLContext==NULL)  {returnFALSE;  }  if(wglMakeCurrent(hDC,m_hGLContext)==FALSE)  {returnFALSE;  }  returnTRUE;  }  并加入一个保护型的成员变量HGLRCm_hGLContext;HGLRC是一个指向renderingcontext的句柄。  在OnCreate函数中调用此函数:  intCGLSample一View::OnCreate(LPCREATESTRUCTlpCreateStruct)  {  if(CView::OnCreate(lpCreateStruct)==-一)  return-一;  HWNDhWnd=GetSafeHwnd();  HD
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
成都电信宽带服务怎么样? 成都的电信宽带的网速怎么样? 我安装的成都电信1.5兆宽带,怎么速度才100KB/S呢 成都电信宽带169套餐网速很慢怎么回事 关于成都电信带宽问题 路亚选择什么调性比较适合 未成年欺凌者需承担哪些法律责任 峨眉山当地都有哪些不容错过的美食小吃? 一类建筑包括哪些? 安徽省最新刑事案件立案标准是多少 人教版七年级英语下册期末试卷及参考答案 MP3的格式转换器那个最好用? 沂水滴滴一个月挣多少钱 日本至今还在歪曲“七七事变”吗? 高考送给学弟学妹的励志留言 实况2021护球按哪个键 《恰同学少年》读后感作文10篇 日本战史是如何记载七七事变的 机械加工表面质量包括哪些内容?它们对产品的使用性能有什么影响?_百度... 机械制造质量的影响因素及控制方案论文 28凤凰和26永久哪辆自行车好。 九一八事变一二八事变和七七事变的相同点 孩子高中毕业家长寄语 高三毕业家长寄语 奶啤能和黑凉粉一起吃吗? 七七事变的性质 承重200斤、弯成90度也不会断的跳高运动的撑杆是怎样制造的? 6s plus 怎么绑定QQ邮箱? 已经用了几年的微信,修改,风险评估显示未满三天? 为什么我修改上面一直显示的是风险评估一周之后已经过了一周... 500瓦的用电器能带动200安培的电表吗? 200安三相四线电表有没有不带电流互感器的 黑豆馒头的做法,黑豆馒头怎么做好吃,黑豆馒头 什么动物一生只会有一个配偶,另一半死了自己不会独活? 你见过哪些动物之间的感情? 用受益匪浅,堪称楷模造一句话 用剥壳造句。 世界上那种动物不会背叛自己爱的人? OPPO A11x手机怎么使用息屏时间? OPPO A11x息屏时间怎么用? 四年级作文秋天安溪的铁观音茶园 什么动物最忠于他们的爱情 怎样用电脑玩手游倩女幽魂 哪些动物离开群体后不能独活 什么动物是不能独活的 另外词语的解析及近义词 中子弹已经问世了吗? 脸字开头有什么四字成语如何成语接龙 nova mctrl600 怎么连接电脑 诺瓦600和700发送卡的区别