屏幕处于睡眠状态时AFX_WM_DRAW2D消息

时间:2014-09-29 16:32:48

标签: c++ windows mfc

我遇到了通过在MFC库中添加D2D对象实现的进度条的问题。 我为我的函数设置了一个消息映射,它根据一些计算不断重绘进度条:

BEGIN_MESSAGE_MAP(CProgressControl, CStatic)
    ON_WM_PAINT()
    ON_REGISTERED_MESSAGE(AFX_WM_DRAW2D, &CProgressControl::OnDraw2D)
END_MESSAGE_MAP()

我的问题是,当用户锁定计算机并且屏幕处于睡眠状态时,我的绘图功能似乎没有被调用。当屏幕处于睡眠状态时,似乎永远不会发送D2D通知消息AFX_WM_DRAW2D来重绘。

我试图在网上搜索这些信息但是在屏幕睡着时没有发现任何可能发生的事情。我很感激任何人可能对此有任何见解。

2 个答案:

答案 0 :(得分:1)

在我看来,这可能是一种正常行为。当您的应用程序最小化或计算机被锁定时,您是否收到任何消息?我怀疑不是。

无论如何,为什么这会打扰你?显然你的进度条在当时是看不见的,所以为什么要烦恼呢?你应该感到高兴 - Windows对你的程序进行了优化。

然而,如果除了在绘画信息中绘画之外还做其他任何事情,那么我建议将它移到其他地方,因为它无论如何都不适合它。绘制消息处理程序应该只包含绘制逻辑,并准备随时调用(或根本不调用)。

答案 1 :(得分:0)

在MFC源中搜索AFX_WM_DRAW2D,您将在wincore.cpp中看到该消息是从渲染目标的BeginDraw和EndDraw调用之间的CWnd :: DoD2DPaint()方法发送的。

因此请调用DoD2DPaint强制重绘。我在OnSize方法中的示例CMFCD2DWalkthroughView(http://msdn.microsoft.com/en-us/library/gg482848.aspx)上执行了此操作,以确保在调整窗口大小而不是大小/绘制不同步时更新和绘制渐变。