C++ 如何在CDockablePane中用新的CMFCPropertyGridCtrl替换CMFCPropertyGridCtrl

C++ 如何在CDockablePane中用新的CMFCPropertyGridCtrl替换CMFCPropertyGridCtrl,c++,mfc,C++,Mfc,我已经在CDockablePane中创建了CMFCPropertyGridCtrl,我想用一个新的CMFCPropertyGridCtrl替换这个CMFCPropertyGridCtrl,然后覆盖OnEraseBkgnd。 OnEraseBkgnd仅在应用程序启动时调用,当我想通过Invalidate或Invalidate调用它时,它没有启动。 我怎样才能打电话给OnEraseBkgnd? 提前谢谢 void CCL2PropertiesPane::HostPropertyGridControl

我已经在CDockablePane中创建了CMFCPropertyGridCtrl,我想用一个新的CMFCPropertyGridCtrl替换这个CMFCPropertyGridCtrl,然后覆盖OnEraseBkgnd。 OnEraseBkgnd仅在应用程序启动时调用,当我想通过Invalidate或Invalidate调用它时,它没有启动。 我怎样才能打电话给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;
}

将\u WM_ERASEBKGND上的
添加到
CCL2PropertiesPane
的消息映射中,以正确擦除背景。或者将
FillRect
函数移到
OnPaint

关于:

void CCL2PropertiesPane::RemoveCurrentPropertyGridControl()
{
    m_pPropertyGridControl = NULL;
    ...
}
上述代码适用于初始化,但不会删除或销毁任何内容。控件仍然存在,这只会使程序忘记如何找到控件。要隐藏控件,请使用:

m_pPropertyGridControl->ShowWindow(SW_HIDE);

要销毁控件,请使用
DestroyWindow()
,但不建议使用上述设置。

将\u WM\u ERASEBKGND上的
添加到
CCL2PropertiesPane
的消息映射中,以正确擦除背景。或者将
FillRect
函数移到
OnPaint

关于:

void CCL2PropertiesPane::RemoveCurrentPropertyGridControl()
{
    m_pPropertyGridControl = NULL;
    ...
}
上述代码适用于初始化,但不会删除或销毁任何内容。控件仍然存在,这只会使程序忘记如何找到控件。要隐藏控件,请使用:

m_pPropertyGridControl->ShowWindow(SW_HIDE);

要销毁控件,请使用
DestroyWindow()
,但不建议使用上述设置。

您的代码有问题,但我们无法帮助您,除非您提供详细信息。确保阅读关于提问的一般指南。此编辑是否可接受@IInspectable您的代码有问题,但我们无法帮助您,除非您提供一个。确保阅读关于提问的一般指南。此编辑是否可接受@非常感谢你@Barmak Shemirani谢谢你@Barmak Shemirani