OnEraseBkgnd擦除背景的问题,急!
我在单文档窗口加载一幅图片,然后需要完成放大或缩小的功能,如果想要擦除窗口时窗口不闪,需要Invalidate参数加上FALSE,自己重新写出来OnEraseBkgnd
我的重写的OnEraseBkgnd,返回TRUE,可是缩小后背景就是无法擦除啊
哪位大牛知道,我是不是少了什么步骤?初学MFC,真的不大懂
BOOL CRectifiView::OnEraseBkgnd(CDC* pDC)
{
return TRUE; //CScrollView::OnEraseBkgnd(pDC);
}
void CRectifiView::OnZoomout()
{
// TODO: 在此添加命令处理程序代码
//m_bmZoom = ZOOMOUT;
m_scale *= 1.1;
Invalidate(FALSE);
}
void CRectifiView::OnZoomin()
{
// TODO: 在此添加命令处理程序代码
//m_bmZoom = ZOOMIN;
m_scale *= 0.9;
int width = int(m_pImg.Width()*m_scale);
int height = int(m_pImg.Height()*m_scale);
CRect rect;
GetClientRect(&rect);
int scroll_x = GetScrollPos(SB_HORZ);
int scroll_y = GetScrollPos(SB_VERT);
if((rect.right+scroll_x)>width)
{
scroll_x = (width - rect.right)>0?(width - rect.right):0;
}
if((rect.bottom+scroll_y)>height)
{
scroll_y = (height - rect.bottom)>0?(height - rect.bottom):0;
}
SetScrollPos(SB_HORZ, scroll_x);
SetScrollPos(SB_VERT, scroll_y);
Invalidate(FALSE);
}
我的重写的OnEraseBkgnd,返回TRUE,可是缩小后背景就是无法擦除啊
哪位大牛知道,我是不是少了什么步骤?初学MFC,真的不大懂
BOOL CRectifiView::OnEraseBkgnd(CDC* pDC)
{
return TRUE; //CScrollView::OnEraseBkgnd(pDC);
}
void CRectifiView::OnZoomout()
{
// TODO: 在此添加命令处理程序代码
//m_bmZoom = ZOOMOUT;
m_scale *= 1.1;
Invalidate(FALSE);
}
void CRectifiView::OnZoomin()
{
// TODO: 在此添加命令处理程序代码
//m_bmZoom = ZOOMIN;
m_scale *= 0.9;
int width = int(m_pImg.Width()*m_scale);
int height = int(m_pImg.Height()*m_scale);
CRect rect;
GetClientRect(&rect);
int scroll_x = GetScrollPos(SB_HORZ);
int scroll_y = GetScrollPos(SB_VERT);
if((rect.right+scroll_x)>width)
{
scroll_x = (width - rect.right)>0?(width - rect.right):0;
}
if((rect.bottom+scroll_y)>height)
{
scroll_y = (height - rect.bottom)>0?(height - rect.bottom):0;
}
SetScrollPos(SB_HORZ, scroll_x);
SetScrollPos(SB_VERT, scroll_y);
Invalidate(FALSE);
}
...全文
相关推荐
透明列表框MFClist实现背景透明
在OnEraseBkgnd函数中,我们通常会清除控件的背景,但在透明效果下,我们不应做任何清除操作,而是返回TRUE,阻止系统默认的背景擦除行为。这样,列表框的背景就会透出其下方的窗口内容。
CTreeCtrl背景图片设置(无闪烁)
**覆盖`OnEraseBkgnd`方法**: 为了进一步减少闪烁,我们需要覆盖`OnEraseBkgnd`方法,返回`TRUE`表示已处理背景擦除,这样系统就不会再尝试默认的擦除操作,从而避免了额外的闪烁
对话框上添加背景图片
OnEraseBkgnd函数简介`OnEraseBkgnd` 是MFC框架中的一个成员函数,当系统需要擦除对话框的背景时会调用此函数。通常情况下,我们可以通过重写该函数来自定义背景绘制逻辑。
MFC实现绘图功能,绘图不会被擦除
**持久化绘图**: 为了确保绘图不会被擦除,我们需要在窗口的OnEraseBkgnd函数中返回TRUE,这样Windows就不会自动擦除背景。
怎样设置对话框,视类窗口背景色多种方法经典总结,可直接运行
白色背景 // 填充背景 pDC->FillSolidRect(&mClientRect, GetBkColor()); return TRUE; // 阻止系统默认的擦除操作 } ``` 3.


界面
