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