最大化时出现bug,如图1所示。
图1
重现方式:运行软件,最小化,点击任务栏显示;点击最大化,在点击最小化;在点击任务栏显示。
就出现图1的情况了。
Demo说明:Demo是直接从WindowImplBase派生出来的,没有重写WindowImplBase里的方法,
直接使用了里面的方法。
这个bug修改比较简单,看界面就知道是阴影的大小没有刷新。
修复方法:
添加阴影的刷新接口。
bool CShadowUI::UpdateNow()
{
bool bRet = false;
if (m_hWnd)
{
Update(GetParent(m_hWnd));
bRet = true;
}
return bRet;
}
调用接口,在窗口变化的时候调用下,可以调用的地方很多。这里我选择放到OnSysCommand,可以下个断点对比下
调用的次数,只需要调用一次就可以了。
LRESULT WindowImplBase::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// 。。。
if( ::IsZoomed(*this) != bZoomed )
{
// 。。。
//Fixed: Bug::20180512
if (m_PaintManager.GetShadow())
{
m_PaintManager.GetShadow()->UpdateNow();
}
}
关于阴影效率问题,阴影算法中是生成的边框部分的位图,并不是一整张位图。