我在CDockablePane中创建了CMFCPropertyGridCtrl,我想用新的CMFCPropertyGridCtrl替换它,然后我重写OnEraseBkgnd。 OnEraseBkgnd仅在应用程序启动时调用,当我想通过Invalidate或InvalidateRect调用它时它没有触发。 我怎样才能调用OnEraseBkgnd? 提前谢谢。
void CCL2PropertiesPane::HostPropertyGridControl(CMFCPropertyGridCtrl* pPropertyGridControl)
{
if(NULL == pPropertyGridControl)
return;
if(m_pPropertyGridControl)
RemoveCurrentPropertyGridControl();
m_pPropertyGridControl = pPropertyGridControl;
SetWindowText(m_pPropertyGridControl->GetName());
CRect clientRectangle;
GetClientRect(&clientRectangle);
m_pPropertyGridControl->Create(WS_CHILD | WS_VISIBLE, clientRectangle, this, PROPERTIES_DOCKABLE_PANE_ID);
}
//--------------------------------------------------------------------------------
void CCL2PropertiesPane::RemoveCurrentPropertyGridControl()
{
m_pPropertyGridControl = NULL;
SetWindowText(GetPaneName());
CRect clientRectangle;
GetClientRect(&clientRectangle);
//here i want to call OnEraseBkgnd
InvalidateRect(clientRectangle);
//Invalidate();
}
//--------------------------------------------------------------------------------
BOOL CCL2PropertiesPane::OnEraseBkgnd(CDC* pDC)
{
CRect clientRectangle;
GetClientRect(&clientRectangle);
CBrush whiteBrush(RGB(250, 250, 250));
pDC->FillRect(clientRectangle, &whiteBrush);
return TRUE;
}
答案 0 :(得分:0)
将ON_WM_ERASEBKGND
添加到CCL2PropertiesPane
的消息地图以正确删除背景。或者将FillRect
功能移至OnPaint
。
关于:
void CCL2PropertiesPane::RemoveCurrentPropertyGridControl()
{
m_pPropertyGridControl = NULL;
...
}
上面的代码适用于初始化,但它不会删除或破坏任何内容。控件仍在那里,它只会使程序忘记如何找到控件。隐藏控件使用:
m_pPropertyGridControl->ShowWindow(SW_HIDE);
要销毁控件使用DestroyWindow()
,但不建议使用上述设置。