关闭

没有躲过的坑--获取设备环境HDC

标签: c++
1772人阅读 评论(0) 收藏 举报
分类:

最近在做一个功能,要使用GDI进行简单绘图。

首先GDI是什么?
英文为:GraphicsDeviceInterface
GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。
在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。

如果希望在图形输出设备上绘图,必须首先获取设备环境(即DC)的句柄。
那么DC又是什么?
HDC设备上下文是一种包含有关某个设备(如显示器或打印机)的绘制属性信息的 Windows 数据结构。所有绘制调用都通过设备上下文对象进行,这些对象封装了用于绘制线条、形状和文本的 Windows API。

那么接下来重要的工作就是如何获得设备环境呢?

获取设备环境句柄,我只说在工作中遇到的问题。

第一种方法就是我首先想到的使用BeginPaint和EndPaint函数,
代码是这样的:

HDC hdc;   
hdc = BeginPaint(hwnd, &ps);  
// ...  
EndPaint(hwnd, &ps);  

这时候就遇到坑儿了,完全是能力不足引发的坑儿。
因为只知道BeginPaint和EndPaint可以获得设备环境句柄,但是忽略了使用的场合。

千万记住了只能在WM_PAINT消息中才可以使用BeginPaint和EndPaint,更可怕的是在其他条件下使用BeginPaint和EndPaint编译器完全不会报错,只是达不到自己想要的结果而已。

那么对于非WM_PAINT消息我们可以这么办:

HDC hdc;  
hdc = GetDC(hwnd);  
//....  
ReleaseDC(hwnd, hdc);  

上述代码解决了我的问题。

windows程序设计 继续!!!

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

MFC的运行机制 以及 MFC中的DC、CDC、HDC、句柄、设备上下文(整理)

在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成员函数.也就是说MFC封装了Windows API.你说你喜欢C++而MFC换一种说法就是一个用...
  • xringm
  • xringm
  • 2016-03-28 10:45
  • 706

Vc中关于DC(设备环境函数(Device Context))的理解

Vc中关于DC(设备环境函数(Device Context))的理解   问:设备描述表DC是一个什么概念,谁通俗的说说,先谢了 学习Vc,首先遇到的就是这个dc,即设置描述表,输出...
  • hushup
  • hushup
  • 2015-05-14 15:04
  • 808

没有躲过的坑--指针(内存泄露)

C++被人骂娘最多的就是指针。 夜深人静的时候,拿出几个使用指针容易出现的坑儿。可能我的语言描述有些让人费劲,尽量用代码说话。通过指向类的NULL指针调用类的成员函数 试图用一个null指针调用类...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-04 23:47
  • 2710

没有躲过的坑--程序中的变量未初始化

变量未初始化是C++编程中最为常见和易犯的错误之一。但是对于全局变量,我们可以不进行初始化,这个变量会默认的用零进行初始化,但是这通常不是一个好的习惯。我们今天先不探讨全局变量还是静态全局变量。那么对...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-21 14:44
  • 11658

没有躲过的坑--string中的c_str()陷阱

string.c_str是Borland封装的String类中的一个函数,它返回当前字符串的首字符地址。c_str函数的返回值是const char*的,不能直接赋值给char*,所以就需要我们进行相...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-16 22:02
  • 3623

没有躲过的坑--正确释放vector的内存

vector的内存会不会泄露? 即使不泄露,怎么能缩小所占空间呢?我们知道vector有个clear()方法?原型:#include void clear();函数clear()删除储存在vect...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-18 21:20
  • 1823

没有躲过的坑--map查找结果处理

通过键-值的方法进行搜索,可以使用map,极大的提高了速度。下面代码就是使用map的find查找,通过键,找出对应的值。map string_int_map; //对string_int_map进行初...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-25 22:53
  • 2164

没有躲过的坑--获取一张图片的width和height

有时候问题总是被想的过于复杂!简单说就是读取一张图片,然后得到这个图片的width和height。首先,用到的库没有Image这个控件,所以不能从控件获得图片的高和宽。于是GOOGLE了一个算法,稍作...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-12 21:46
  • 1477

没有躲过的坑--有if就要有else(一定成对)

我们都很擅长流程控制,能写出很好很复杂的if语句。但是有时过于兴奋,更多的是过于自信而只写了if,而没有写else。这是一个争论不休的话题,很多人,很多大师都认为有的情况下可以不写else,只写if。...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-25 21:18
  • 3027

没有躲过的坑--意想不到的除数为零

工程中有这样一个需求,需要获得一张图片的width和height,然后等比例的显示这张图片。首先是获得得到一张图片的路径,然后计算出他的width和height,然后计算:int resize_wid...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-22 22:23
  • 2072
    个人资料
    • 访问:4542140次
    • 积分:40783
    • 等级:
    • 排名:第105名
    • 原创:565篇
    • 转载:29篇
    • 译文:13篇
    • 评论:766条
    微信公众号
      我的微信公众号
      为你推荐最新的博文~更有惊喜等着你
    时光荏苒
      白驹过隙
    博客专栏
    文章分类
    百度统计
    Google Analytics