HWND:h是类型描述,表示句柄(handle),Wnd是变量对象描述,表示窗口,所以hWnd表示窗口句柄。Microsoft Windows运行环境,通过给应用程序中的每个窗体和控件分配一个句柄来标识他们。hWnd属性用于Windows API调用。许多Windows运行环境函数需要活动窗口的hWnd作为参数。在Windows环境中,句柄是用来标识项目的,这些项目包括:  
          *.模块(module)  
          *.任务(task)  
          *.实例(instance)  
          *.文件(file)  
          *.内存块(block   of   memory)  
          *.菜单(menu)  
          *.控制(control)  
          *.字体(font)  
          *.资源(resource),包括图标(icon),光标(cursor),字符串(string)等  
          *.GDI对象(GDI   object),包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域(region),以及设备描述表(device   context)。

HDC:设备上下文是一种包含有关某个设备的绘制属性信息的Windows数据结构。所有绘制调用都通过设备上下文对象进行,这些对象封装了用于绘制线条,形状和文本的Windows API。它并没有直接映射到显卡、显示器等硬件设备,而是映射到一种内存虚拟结构(可以认为就是一个窗口)。

HGLRC:图形操作描述表。OpenGL Render Contex。在Windows下用GDI作图必须通过DC调用相应的函数;用OpenGL作图也是类似,OpenGL函数是通过Render Context完成三维图形的绘制。Windows下的窗口和设备上下文支持“位图格式”(PIXELFORMAT)属性,和RC有着位图结构上的一致。只要在创建RC时与一个DC建立联系,OpenGL的函数就可以通过RC对应的DC画到相应的显示设备上。

hWnd是windows给窗口发送消息(事件)用的
hDC是把窗口绘制在屏幕上用的。

HGLRC是opengl用的。

在通用型的象素格式下,所有的象素格式和渲染上下文都是通过GDI来实现的。在设备型象素格式下,多数操作是通过设备来实现的。在OpenGL绘图的时候,窗口,位图或设备的象素格式必须设置好,然后产生一个渲染上下文,这之后绘图功能才能生效。

DC用来产生OpenGL 的渲染上下文,OpenGL使用这个渲染上下文在DC上绘图,最后DC把图形绘制在设备显示上。

_hwnd = ::CreateWindowEx(extendedStyle,_traits->useCursor ? Win32WindowingSystem::osgGraphicsWindowWithCursorClass.c_str() :Win32WindowingSystem::osgGraphicsWindowWithoutCursorClass.c_str(),_traits->windowName.c_str(),windowStyle,_windowOriginXToRealize,_windowOriginYToRealize,_windowWidthToRealize,_windowHeightToRealize,NULL,NULL,::GetModuleHandle(NULL),NULL);if (_hwnd==0){reportErrorForScreen("GraphicsWindowWin32::createWindow() - Unable to create window", _traits->screenNum, ::GetLastError());return false;}_hdc = ::GetDC(_hwnd);if (_hdc==0){reportErrorForScreen("GraphicsWindowWin32::createWindow() - Unable to get window device context", _traits->screenNum, ::GetLastError());destroyWindow();_hwnd = 0;return false;}//// Set the pixel format according to traits specified//if (!setPixelFormat()){::ReleaseDC(_hwnd, _hdc);_hdc  = 0;destroyWindow();return false;}//// Create the OpenGL rendering context associated with this window//_hglrc = createContextImplementation();if (_hglrc==0){reportErrorForScreen("GraphicsWindowWin32::createWindow() - Unable to create OpenGL rendering context", _traits->screenNum, ::GetLastError());::ReleaseDC(_hwnd, _hdc);_hdc  = 0;destroyWindow();return false;}

关于RC有以下需要注意的地方:

1.一个线程只能拥有一个RC,也就是说,用户如果在一个线程内对不同设备作图,只能通过变更与RC对应的DC来完成,而RC在线程中保持不变。

2.设定DC位图格式等于设定了相应窗口的位图格式,并且DC和窗口的位图格式一旦确认就不能再改变。

3.一个RC虽然可以更换DC,但在任何时刻只能利用一个DC,但由于一个窗口可以让多个DC作图从而可以让多个线程利用多个RC在该窗口上执行OpenGL操作。

4.当使用双缓存用OpenGL产生动画时,不能使用GDI函数向该DC作图。

在使用OpenGL进行绘图之前,需要设置窗口的类型属性中的WS_CLIPCHILDREN和WS_CLIPSIBLINGS,否则函数SetPixelFormat的调用将失败。

着色正文与设备正文有着相同的象素格式。

C++学习(一五一)hwnd hdc hglrc相关推荐

  1. HWND HDC CRect

     hWnd是窗口句柄,通过它可以得到窗口的属性. hDC是窗口显示上下文句柄,只有在窗口进行图形,文字输出的时候才需要它. 有了hWnd,可以使用API的GetDC()函数得到与其相关的hDC: ...

  2. 《图形学》实验一:钻石图案

    开发环境: VC++6.0,OpenGL 实验内容: 绘制钻石图案.将一圆周进行n等分,然后将所有的等分用直线连接,构成图案. n=8 q =2*p/n X=2*r*cos(q) Y=r*sin(q) ...

  3. win32原生API实现OpenGL例子(无glew,glut等第三方依赖库)

    正文:   话不多说,直接上代码: #include<Windows.h> #include<GL/GL.h> #pragma comment(lib,"opengl ...

  4. 几个opengl立方体绘制案例

    VC6 下载 http://blog.csdn.net/bcbobo21cn/article/details/44200205 opengl环境配置 http://blog.csdn.net/bcbo ...

  5. HWND CDC HDC的转换

    CWnd *pWnd = CWnd::FromHandle(hWnd); //hWnd ------->CWnd HDC hDC = GetDC(hWnd); //hWnd -------> ...

  6. 通过代码学习OpenGL

    这是本人学习江超宇翻译的NeHe OpenGL Tutorial 的结果,这个教程新手看很实用,只要你懂一点点OpenGL和WIN32就可以看的很明白. 创建了一个新的 Win32 程序(并非控制台程 ...

  7. 在C#中调用一个dll函数,其中有个参数为 hdc,如何在C#中得到这个值并传给这个参数呢?

    用IntPtr类型,Hdc一般是指绘图设备句柄,用Graphics的成员方法GetHdc获得,Graphics可以用静态方法FromHwnd创建某个窗体的绘图器,把某个窗体的Handle传给他就可以了 ...

  8. win32 字体 api学习总结

    TrueType字体 TrueType字体,中文名称全真字体,是由Apple公司和Microsoft公司联合提出的一种采用新型数学字形描述技术的计算机字体.它用数学函数描述字体轮廓外形,含有字形构造. ...

  9. 学习C++在windows下窗口应用程序开发(一)

    在网上有幸找到孙鑫老师的C++视频,先让我膜拜一下,看到视频是免费的,所以分享一下URL应该没什么事情吧,偷摸的....emmmmmm 点击打开链接 好了,还是进入正题吧,毕竟这是我第一次写博客,也是 ...

最新文章

  1. 如何拿到高薪数据分析师offer?从精准解读一篇招聘信息开始!
  2. matlab 多次求解偏微分方程 ode45
  3. Ubuntu12.04下arm交叉编译环境的建立
  4. jsp超链接中怎么跳转页面跳转页面_在页面点击超链接跳到别的页面,方法是什么?...
  5. NAR | 陈加余/陈亮合作建立R-loop全基因组分布与调控的专家数据库
  6. 诸如fluke等网络测试仪的工作原理简介
  7. mysql5.7密码过期ERROR 1862 (HY000): Your password has expired. To log in you must change
  8. 合成未来宝宝照片_当英国皇室宝宝长大:阿奇王子变卷毛星人,夏洛特公主颜值最能抗...
  9. 我在看着你呢——shiro学习
  10. 修改jar 注入_Apache Tika命令注入漏洞挖掘
  11. 设计模式 六大法则
  12. 逻辑结构与存储结构关系
  13. pdf阅读神器推荐——PDF-XChange Editor V8
  14. 自监督学习详细介绍(学习笔记)
  15. django ajax jquery csrf_exempt 设置favicon.ico
  16. Java虚拟机——Parallel Scavenge收集器
  17. dparsf是什么_老师,我用DPARSF做Slice Timeing时老报错,请问您是什么原因呢?
  18. 超声波测距模块HC-SR04详解(基于51单片机)
  19. sprintf() 用法
  20. 京东Java岗:来自面试官的夺命连环56问,直接当场怀疑人生~

热门文章

  1. uboot中usb storage启动方法1
  2. Bmob用户功能详解(二)
  3. 全金属牙冠-市场现状及未来发展趋势
  4. 1063 计算谱半径(JAVA)
  5. 520表白html实现3D动态相册,换成女朋友照片
  6. 长沙连续召开全市企业上市工作座谈会和经济运行调度会:越是“吃劲”越向前
  7. cookie使用注意问题【cookie学习笔记】
  8. 从GLM、ChatGLM-6B、MOSS到垂类医疗/金融/法律模型、可商用模型
  9. 安徽大学计算机保研学校,她手握6所名校offer,19岁从安徽大学保研到北大,网友却说她亏了...
  10. HWAutoTool 自动化工具操作手机模拟器文档介绍