none
Проблемы с MFC CScrollView (C++). Достучаться до техподдержки. RRS feed

  • Вопрос

  • Здравствуйте!

    Я столкнулся с проблемой при использовании MFC с архитектурой Документ/Представление, если для представления используется CScrollView. В определенные моменты начинает возникать исключение в файле ...\vctools\vc7libs\ship\atlmfc\src\mfc\viewscrl.cpp Line: 385 с текстом в окне вывода: "Error: must call SetScrollSizes() or SetScaleToFitSize()".

    Дело в том, что я вызываю SetScrollSizes в переопределенном методе вида OnInitialUpdate. Тем не менее, исключение возникает. Я стал смотреть, и оказалось, что метод вида OnPrepareDC вызывается раньше метода OnInitialUpdate, чего быть не должно. В результате исследования вышел на строки 492-495 файла afxwinappex.cpp, содержащие следующий код:

    if (pFrameImpl->m_pFrame->IsZoomed())

    {

    pFrameImpl->m_pFrame->RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN);

    }

    который приводит к падению приложения. Вызов IsZoomed навел на мысль о развернутом окне приложения. Так и оказалось. Проблема появляется после того, как окно приложения разворачивается на весь экран. Затем, когда приложение закрывается и вновь запускается, оно открывается уже в развернутом состоянии, но тут же "падает". Если приложение не закрывать в развернутом состоянии - все будет работать. Также , если при очередном запуске ошибку проигнорировать и восстановить окно приложения, ошибка при последующих запусках не проявляется.

    Вообщем, я не уверен, но по-моему, это ошика библиотеки MFC, связанный с тем, что библиотека сама сохраняет в реестре последний вид главного окна приложения, и если окно оказывается развернутым на весь экран, пытается обновить его при инициализации, при этом инициализация вида предварительно не производится корректно.

    Просьба передаресовать это сообщение специалистам, участвующим в разработке MFC для проверки моей гипотезы. Если мне подскажут корректный "обход" этой проблемы - будет вообще замечательно.

    Спасибо.

Ответы

  • Здравствуйте.

    Спасибо за фидбек, вы сами можете достучатся до разработчиков, используя специальный сайт Microsoft Connect, назначение которого - дать пользователям возможность создать баг репорт или фидбек о продукте.


    Для связи [mail]

    • Помечено в качестве ответа Abolmasov Dmitry 31 мая 2012 г. 8:34