OnEraseBkgnd()返回TRUE和FALSE的区别

xiaoakang 2007-07-30 07:10:56
BOOL ChighchartDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CBitmap bmp;
CBitmap *ptrBmpOld;
CDC dcMemory;
BITMAP bm;
CRect rect;
int i, j;
int nHor, nVer;
bmp.LoadBitmap(IDB_BITMAP1);
bmp.GetBitmap(&bm);
GetClientRect(rect);
nHor=rect.Width()/bm.bmWidth+1;
nVer=rect.Height()/bm.bmHeight+1;
dcMemory.CreateCompatibleDC(pDC);
ptrBmpOld=dcMemory.SelectObject(&bmp);
for(i=0; i<nHor; i++)
{
for(j=0; j<nVer; j++)
{
pDC->BitBlt
(
i*bm.bmWidth,
j*bm.bmHeight,
bm.bmWidth,
bm.bmHeight,
&dcMemory,
0,
0,
SRCCOPY
);
}
}
dcMemory.SelectObject(ptrBmpOld);
return FALSE;
//return CDialog::OnEraseBkgnd(pDC);
}
上面是我的一个刷对话框背景的代码,最后我返回的是FALSE,我把这句话改成return TRUE后发现结果是一样的,没有什么不同啊,请教一下,查看了一下MSDN:Nonzero if it erases the background; otherwise 0.看了还是不理解,字面意思是如果刷背景返回非0,如果不刷背景返回0,可我的程序不管返回TRUE还是FALSE都刷了背景的啊,并且效果是一摸一样,真是没搞懂!
请赐教!
...全文
406 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdljf 2007-07-31
  • 打赏
  • 举报
回复
如果你的代码重绘了背景,返回非0,否则,返回0,
系统会根据你的返回值,确定是否刷新屏幕

WM_ERASEBKGND 消息负责重绘背景
WM_PAINT 消息负责重绘

调用InvalidateRect函数的时候,系统会发送WM_PAIT消息引发重绘过程,如果
参数 BOOL bErase 为TRUE的话,系统会先发送WM_ERASEBKGND消息重绘背景,否则不会重绘背景
菜牛 2007-07-30
  • 打赏
  • 举报
回复
这是一个规范,一般情况下没有什么区别,但是如果什么时候用到了,会根据函数返回值判断后续处理。因此最好按照要求返回数据。
bborn 2007-07-30
  • 打赏
  • 举报
回复
除了OnEraseBkgnd 还有OnPaint

OnPaint 也可能重绘了全部
xiaoakang 2007-07-30
  • 打赏
  • 举报
回复
请教!!!!

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧