在使用CScrollView派生作为其主视图的Visual Studio 2012 MFC应用程序中,该视图的垂直滚动条与最近的可停靠窗格(CDockablePane)的边缘之间可能会出现间隙。可以通过仅两个非常简单的修改就可以在一个普通的MFC应用程序中演示此错误,如下所述。该错误出现在我尝试过的所有Windows版本中,包括7、8和10。我可以做些什么来解决此错误?在更高版本的Visual Studio中还存在该错误吗?
以下是复制错误的简单说明:
在“ VS 2012新建项目向导”中,选择“ MFC应用程序”,然后按“确定”。接受除一个以外的所有选项的默认值:在最后一页(“生成的类”)上,将基类从CView更改为CScrollView。然后按完成。
现在进行以下编辑。在OnInitialUpdate的视图.cpp文件中找到“ // TODO:计算此视图的总大小”行。将大小从100更改为2000。此更改的唯一目的是确保视图具有滚动条。
现在再进行一次编辑。找到视图的OnDraw处理程序,删除pDC周围的注释,并在“ // TODO:在此处添加本机数据的绘制代码”行下方,添加以下行:
pDC->FillSolidRect(0, 0, 2000, 2000, RGB(255, 0, 0));
现在OnDraw函数应该看起来像这样:
void CVS2012View::OnDraw(CDC* pDC)
{
CVS2012Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: add draw code for native data here
pDC->FillSolidRect(0, 0, 2000, 2000, RGB(255, 0, 0));
}
此更改的唯一目的是使查找错误更容易。
现在运行生成的应用程序。该视图应为鲜红色,并且属性栏应停靠在该视图的右侧。使用文件/新建(或Ctrl + N)创建第二个新文档。然后选择第一个文档的标签(在我的系统上为黄色)。现在将属性栏的左边缘拖动到左侧(使属性栏变宽,视图变窄)。释放鼠标时,应观察到视图的垂直滚动条和属性栏之间的间隙,如随附的屏幕截图所示。
请注意,事件的顺序很重要!如果只打开一个文档,则不会看到该错误。总的来说,我对“新的” MFC(BCGSoft)功能包感到满意,但我确实担心它过于复杂和脆弱。另请参阅我的related question。