+ -
当前位置:首页 → 问答吧 → 获得控件的句柄使用CDC在上面画图都做了些什么?求内幕(在线等)

获得控件的句柄使用CDC在上面画图都做了些什么?求内幕(在线等)

时间:2011-12-27

来源:互联网

我的一个static控件,对外提供了句柄,然后另外一个模块获得了该句柄后,就在static上绘制出了视屏,估计是通过
CDC *pDC = GetDC(mstatic.GetSafeWnd())后在上面绘制出来的吧。 那么CDC在static上面绘制空图片的时候,static是如何响应该绘制过程然后更新自己上面的图片的呢? 有通过OnPaint更新吗?还是其他的绘制函数? 求解?

为什么获得了控件的句柄后即便不在OnPaint函数里面,也可以在控件上作图并 更新?是怎么触发更新的? 百思不得其解。

作者: xiaoxiaoyu85   发布时间: 2011-12-27

顶起来,估计只有MVP能回答了,求高手...

作者: xiaoxiaoyu85   发布时间: 2011-12-27

1。 有了句柄,就等于有了操纵这个控件的一切的权利
2。 能得到它的DC,也能得到它的消息处理函数,你可以了解一些关于子类化的东西(SubclassWindow)
3。 当然了,也可以在整个窗口的OnPaint的时候,去绘制那个DC。

作者: healer_kx   发布时间: 2011-12-27

引用 2 楼 healer_kx 的回复:
1。 有了句柄,就等于有了操纵这个控件的一切的权利
2。 能得到它的DC,也能得到它的消息处理函数,你可以了解一些关于子类化的东西(SubclassWindow)
3。 当然了,也可以在整个窗口的OnPaint的时候,去绘制那个DC。


多谢 了。

作者: xiaoxiaoyu85   发布时间: 2011-12-27

能得到它的DC,也能得到它的消息处理函数,你可以了解一些关于子类化的东西(SubclassWindow)
这个不太能理解,是创建一个子类吗?

得到DC后,在控件类外面去绘制,控件类里面,如何知道的呢?

作者: xiaoxiaoyu85   发布时间: 2011-12-27

DC 的意思是绘图环境 CDC是 MFC中DC的类。
DC就是用来绘图的。

OnPaint 是由系统调用 同时 系统提供DC来绘图。
GetDC的方式 是手工调用 同时手工申请DC来绘图。

这俩关系就跟栈内存和堆内存一样,都是内存只不过管理的方式不一样。

作者: hotpos   发布时间: 2011-12-27

子类化可以理解为消息的拦截处理,处理自己想处理的把不想处理的或者做过手脚的数据交给原消息处理函数。
处理的方式就是替换窗口的消息处理函数,可以通过SetWindowLong函数实现这个功能,所需的是窗口句柄不是DC句柄。

在外面用GetDC的方式绘制, 窗口是无法获知的。
你不能阻止别人在你的窗口上乱画。

作者: hotpos   发布时间: 2011-12-27

引用 6 楼 hotpos 的回复:


在外面用GetDC的方式绘制, 窗口是无法获知的。
你不能阻止别人在你的窗口上乱画。


哦,谢谢了,关键就是这个,等会结贴,呵呵

作者: xiaoxiaoyu85   发布时间: 2011-12-27

在外面用GetDC的方式绘制, 窗口是无法获知的。
你不能阻止别人在你的窗口上乱画。


那别人画完自后,我是怎样及时响应更新的呢? 就是这里不理解。。

作者: xiaoxiaoyu85   发布时间: 2011-12-27