MFC:如何为继承的 CDialogBar 正确修复重绘?
MFC: how to fix redraw properly for inherited CDialogBar?
我从 CDialogBar 继承 class。
class CMyDialogBar : public CDialogBar
{
DECLARE_DYNAMIC(CMyDialogBar)
// Implementation
public:
BOOL Create(CWnd * pParentWnd, UINT nIDTemplate, UINT nStyle, UINT nID);
BOOL Create(CWnd * pParentWnd, LPCTSTR lpszTemplateName, UINT nStyle, UINT nID);
protected:
virtual void DoDataExchange(CDataExchange* pDX) { return CDialogBar::DoDataExchange(pDX); }
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
DECLARE_MESSAGE_MAP()
};
唯一的大变化是功能OnEraseBkgnd()
,因为我喜欢白色的背景。
BOOL CMyDialogBar::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
它工作正常。但是,当我移动钢筋时,它并没有正确重绘,如下图所示。
源代码可以在这里下载:https://138.197.210.223/test/My.zip.
您需要 OnEraseBkgnd
覆盖才能 实际上 擦除背景!例如,要将整个客户端矩形设置为白色,您可以这样做:
BOOL CMyDialogBar::OnEraseBkgnd(CDC *pDC)
{
RECT wr; GetClientRect(&wr);
pDC->FillSolidRect(&wr, RGB(255,255,255));
return TRUE;
}
编辑:也许您已经有了这个,但也一定要将 ON_WM_ERASEBKGND
添加到您的消息映射中:
BEGIN_MESSAGE_MAP(CMyDialogBar, CDialogBar)
// ... (other message handlers, if any) ...
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
我从 CDialogBar 继承 class。
class CMyDialogBar : public CDialogBar
{
DECLARE_DYNAMIC(CMyDialogBar)
// Implementation
public:
BOOL Create(CWnd * pParentWnd, UINT nIDTemplate, UINT nStyle, UINT nID);
BOOL Create(CWnd * pParentWnd, LPCTSTR lpszTemplateName, UINT nStyle, UINT nID);
protected:
virtual void DoDataExchange(CDataExchange* pDX) { return CDialogBar::DoDataExchange(pDX); }
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
DECLARE_MESSAGE_MAP()
};
唯一的大变化是功能OnEraseBkgnd()
,因为我喜欢白色的背景。
BOOL CMyDialogBar::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
它工作正常。但是,当我移动钢筋时,它并没有正确重绘,如下图所示。
源代码可以在这里下载:https://138.197.210.223/test/My.zip.
您需要 OnEraseBkgnd
覆盖才能 实际上 擦除背景!例如,要将整个客户端矩形设置为白色,您可以这样做:
BOOL CMyDialogBar::OnEraseBkgnd(CDC *pDC)
{
RECT wr; GetClientRect(&wr);
pDC->FillSolidRect(&wr, RGB(255,255,255));
return TRUE;
}
编辑:也许您已经有了这个,但也一定要将 ON_WM_ERASEBKGND
添加到您的消息映射中:
BEGIN_MESSAGE_MAP(CMyDialogBar, CDialogBar)
// ... (other message handlers, if any) ...
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()