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

Mfc GetDC()或CClientDC dc(此)在非消息函数中不起作用?,mfc,dialog,Mfc,Dialog,我试图在MFC对话框中设置背景图像,我成功地获取了客户机设备上下文,同时在诸如OnTimer、OnPaint、OnEraseBkgrd之类的函数中写入了CDC*pDC=GetDC或CClientDC dcthis,但没有在CDialog类中新声明的functionalso中 我用一个简单的绘图函数测试了这一点,就像在这两种情况下都画一个矩形一样,结果是,如果我用OnTimer、OnPaint、OnEraseBkgrd编写它,它工作得很好,但在我声明的新函数中却不行 任何人都可以教我如何在非消息函

我试图在MFC对话框中设置背景图像,我成功地获取了客户机设备上下文,同时在诸如OnTimer、OnPaint、OnEraseBkgrd之类的函数中写入了CDC*pDC=GetDC或CClientDC dcthis,但没有在CDialog类中新声明的functionalso中

我用一个简单的绘图函数测试了这一点,就像在这两种情况下都画一个矩形一样,结果是,如果我用OnTimer、OnPaint、OnEraseBkgrd编写它,它工作得很好,但在我声明的新函数中却不行


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

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

您应该使用WM_PAINT或在某些情况下使用WM_橡皮擦BKGND消息来绘制。 新声明的函数是什么

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


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

您的屏幕绘图只能在OnPaint或OnEraseBkgrd中完成。如果需要从对话框中的其他位置提示绘图,则需要调用InvalidateBu立,然后调用OnPaint。调用OnPaint时,可以调用pDC->GetClipBox以获取需要更新的rect

我认为最好的方法是在对话框类中存储一个指向背景图像的指针,然后当您想要更改背景图像时,设置位图指针并调用invalidate。然后,OnPaint函数将执行BitBlt以实际绘制新位图