0

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

我通过一个简单的绘图函数对此进行了测试,比如在这两种情况下都绘制了一个矩形,结果是,如果我把它写成OnTimer, OnPaint, OnEraseBkgrd,它工作得很好,但是在我声明的新函数中它没有!

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

4

2 回答 2

0

为什么要使用 OnTimer 处理程序进行绘图?

您应该使用 WM_PAINT(或在某些情况下为 WM_ERASEBKGND)消息进行绘图。新声明的函数是什么?

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

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

于 2012-06-09T15:12:11.133 回答
0

您在屏幕上的绘图只能在 OnPaint(或 OnEraseBkgrd)中完成。如果您需要提示从对话框中的其他位置进行绘图,则需要调用 InvalidateRect(),它随后将调用 OnPaint()。当你调用 OnPaint() 时,你可以调用 pDC->GetClipBox() 来获取需要更新的矩形。

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

于 2012-06-11T08:42:18.537 回答