visual-studio - MFC:如何为继承的 CDialogBar 正确修复重绘?
问题描述
我从 CDialogBar 创建了一个继承类。
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()
推荐阅读
- javascript - 仅向 React App 获取一次数据。页面重新加载后不再获取
- python - 我编写的代码在“if”语句中完美运行,但在“else”语句中不起作用
- jpa - 为什么子实体的 id 在 EclipseLink 的响应消息中返回 0?
- ios - Swift 的问题:可选类型 '[Int : Int]?' 的值 未拆封;你的意思是用'!' 或者 '?'?
- linux - 容器没有端口
- css - CSS在同一页面中具有不同ID的多个表
- raku - Baggy add (+) 是否适用于 MixHash 权重?
- javascript - 输入范围滑块的显示值
- ios - 在聊天视图中管理键盘
- uml - 领域特定语言与领域特定建模语言