В приложении Visual Studio 2012 MFC, использующем производное CScrollView в качестве основного вида, между вертикальной полосой прокрутки представления и краем ближайшей закрепляемой панели (CDockablePane) может появиться пробел.Эта ошибка может быть продемонстрирована в стандартном приложении MFC только с двумя очень простыми модификациями, как описано ниже.Ошибка возникает во всех версиях Windows, которые я пробовал, включая 7, 8 и 10. Могу ли я что-нибудь сделать, чтобы исправить эту ошибку?Существует ли ошибка в более поздних версиях Visual Studio?
Вот простые инструкции по репликации ошибки:
В мастере создания новых проектов VS 2012 выберите Приложение MFC и нажмите OK.Примите значения по умолчанию для всех параметров, КРОМЕ ОДНОГО: На самой последней странице (Сгенерированные классы) измените Базовый класс с CView на CScrollView.Затем нажмите Готово.
Теперь сделайте следующее редактирование.Найдите строку "// TODO: вычислить общий размер этого представления" в OnInitialUpdate, в файле представления .cpp.Измените размер с 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));
}
Единственная цель этого изменения - облегчить просмотр ошибки.
Теперь запустите полученное приложение.Вид должен быть ярко-красным, а панель свойств должна быть пристыкована справа от вида.Используйте File / New (или Ctrl + N), чтобы создать второй новый документ.Затем выберите вкладку первого документа (в моей системе она желтая).Теперь перетащите левый край панели свойств влево (делая панель свойств шире, а вид - более узким).Когда вы отпустите кнопку мыши, вы должны заметить разрыв между вертикальной полосой прокрутки представления и панелью свойств, как показано на прилагаемом скриншоте.
Обратите внимание, что последовательность событий важна!Если у вас открыт только один документ, вы не увидите ошибку.В целом я доволен «новым» пакетом функций MFC (BCGSoft), но я действительно переживаю, что он слишком сложный и хрупкий.Смотрите также мой связанный вопрос .