MFC中 OnEraseBkgnd消息

CWnd::OnEraseBkgnd afx_msg BOOL OnEraseBkgnd( CDC* pDC ); 返回值:如果它擦除了背景,则返回非零值;否则返回0。


  • 当CWnd对象的背景需要被擦除时(例如,当窗口大小被改变时),框架就调用这个函数。它被调用以便为绘图准备无效区域。

缺省的实现使用窗口类结构中hbrBackground成员指定的窗口类背景刷子擦除窗口背景。

如果hbrBackground成员为NULL,你重载的OnEraseBkgnd必须擦除背景色。你的重载函数也可以为刷子调用UnrealizeObject函数,将目标刷子的原点与CWnd的坐标对齐,然后选择该刷子。

如果重载的OnEraseBkgnd在响应WM_ERASEBKGND时处理了这个消息并擦除了背景,则应当返回非零值,表明不需要进一步擦除。如果它返回0,则窗口依然被标记为需要擦除(通常,这意味着PAINTSTRUCT结构的fErase成员将为TRUE)。

Windows假定背景是用MM_TEXT映射模式计算的。如果设备环境使用了其它映射模式,则擦除的区域可能不在客户区的可见部分之内。

注意 框架调用这个成员函数以允许你的应用程序处理一个Windows消息。传递给你的成员函数的参数反映了接收到消息时框架接收到的参数。如果你调用了这个函数的基类实现,则该实现将使用最初传递给消息的参数(而不是你提供给这个函数的参数)。

问: OnEraseBkgnd函数中返回TRUE或FALSE有什么区别?

答: WM_ERASEBKGNDReturn ValuesAn application should return nonzero if it erases the background; otherwise, it should return zero. A:true表示已处理背景刷新,false表示需要在OnPaint里处理

问:在OnEraseBkgnd中绘制对话框的背景图片和在OnPaint中绘制对话框的背景图片由什么区别,另外OnEraseBkgnd和CtlColor有什么区别?

答: OnEraseBkgnd是在窗口大小发生改变等情况下发生的,它将绘制窗口背景;而OnCtlColor是当窗口的控件需要绘制时发生的,它将绘制窗口的控件。 A:OnEraseBkgnd :在窗口背景需要重绘时调用.OnPaint : 此时OnEraseBkgnd已经调用过了,所以在此响应函数体内对背景进行的操作将覆盖OnEraseBkgnd中所做的操作.OnCtlColor : 由于在窗口将要被(第一次)绘制时响应,子窗口可以通过发送WM_CTLCOLOR请求父窗口传来一个HBRUSH.

2参数编辑

pDC 指定了设备环境对象。


你可能感兴趣的:(windows,背景色)