背景
在MFC项目中,我打算通过重写OnSize()函数来进行控件动态排列。然而,当我响应该函数后,虽然能调整,但是旧控件的边框仍在原先的位置。具体如下图:
软件初始化布局
响应OnSize()之后,出现红框的内容
分析
通过图片可以看出,像是原先的控件没有重画,或者说新控件直接画在了旧的画布上,导致出现重叠。因为,我们应该考虑重绘一下画布。
解决方案
其实也非常简单,在OnSize() 函数的最后加一句 Invalidate()
就完美解决了。具体代码如下:
void CAirQualityDevDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
if (nType == SIZE_MINIMIZED) return;
// 调整控件位置的代码
Invalidate();
return true;
}