GetDC()或CClientDC dc(this)在非消息函数中不起作用?

时间:2012-06-09 08:37:21

标签: mfc dialog

我正在尝试在MFC对话框中设置背景图像,我成功获取客户端设备上下文,同时在CDC* pDC=GetDC(),{CClientDC dc(this)等函数中编写OnTimerOnPaint {1}},OnEraseBkgrd,但不在新声明的函数中(也在CDialog类中)。

我通过简单的绘图功能对此进行了测试,就像在两种情况下绘制一个矩形一样,结果是,如果我在OnTimerOnPaintOnEraseBkgrd中编写它,它的工作原理好吧,但是在我宣布的新功能中它没有!

任何人都可以教我如何在非消息函数中获取客户端DC?

2 个答案:

答案 0 :(得分:0)

为什么用于绘图的OnTimer处理程序?

您应该使用WM_PAINT(或在某些情况下WM_ERASEBKGND)消息来进行绘图。 什么是新申报的职能?

您引用的所有名称都是消息处理程序。这些函数映射到消息映射,并在收到消息时由框架调用。

要设置背景,您应该使用WM_ERASEBKGND。处理程序提供了您应该用于绘图的设备上下文。

答案 1 :(得分:0)

您的绘图到屏幕应该只在OnPaint(或OnEraseBkgrd)中完成。如果需要从对话框中的其他位置提示绘图,则需要调用InvalidateRect(),然后调用OnPaint()。调用OnPaint()时,可以调用pDC-> GetClipBox()来获取需要更新的矩形。

我认为做你想做的最好的方法是在对话框类中存储指向背景图像的指针,然后当你想要改变背景图像时,设置位图指针并调用InvalidateRect()。然后你的OnPaint()函数会使BitBlt实际绘制新的位图。