Разрыв между вертикальной полосой прокрутки представления и закрепляемой панелью в приложении STOCK Visual Studio 2012 - PullRequest
0 голосов
/ 31 января 2019

В приложении 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), чтобы создать второй новый документ.Затем выберите вкладку первого документа (в моей системе она желтая).Теперь перетащите левый край панели свойств влево (делая панель свойств шире, а вид - более узким).Когда вы отпустите кнопку мыши, вы должны заметить разрыв между вертикальной полосой прокрутки представления и панелью свойств, как показано на прилагаемом скриншоте.

VS2012 scroll bar gap bug

Обратите внимание, что последовательность событий важна!Если у вас открыт только один документ, вы не увидите ошибку.В целом я доволен «новым» пакетом функций MFC (BCGSoft), но я действительно переживаю, что он слишком сложный и хрупкий.Смотрите также мой связанный вопрос .

...