Иллюстрированный самоучитель по Visual Studio.Net


Тестирование


Приложения, даже если они на первый взгляд функционируют корректно, надо тщательно тестировать, с тем чтобы проверить максимальное число состояний и ситуаций, в которых оно может оказаться. Так, тестируя настоящее приложение, я обнаружил два дефекта (не удивлюсь, если вы найдете еще больше). Первый состоит в том, что, если до выполнения команды Refresh изменить вручную позицию полос прокрутки, после выполнения команды происходит рассинхронизация полос. Лекарство оказалось простым — вставить в нужное место строку с вызовом:

ScrollToPosition(CPoint(0,0));

Эта функция является методом класса CScrollview, она устанавливает обе полосы прокрутки в исходные состояния. Определение места вставки мы оставляем читателю.

Кроме того, логика приложения нарушается, если окна мини-чертежей (cwndGeom) видны не полностью, а только частично. Курсор в этом случае не изменяет свою форму, несмотря на то что он выходит за границы окна CRightView, то есть за границы клиентской области окна CTreeFrame. Этот эффект наблюдается только при выходе в сторону гипотетического продолжения окна cwndGeom. Объяснение в том, что мы захватили мышиные сообщения (SetCapture) и направляем их в частично скрытое окно типа CWndGeom, которое не отпускает мышь, так как справедливо считает, что курсор находится над его прямоугольником. Окно не знает, что та его часть, которая находится под курсором, в данный момент скрыта окном-рамкой или полосами прокрутки. Вы помните, что полосы прокрутки являются частью клиентской области окна? Если диагноз поставлен точно, то и лечение будет эффективным. Ниже приведена новая версия обработки сообщения

WM_MOUSEMOVE В Классе CWndGeom:

void CWndGeom::OnMouseMove(UINT nFlags, CPoint point)

{

//====== Два прямоугольника (CWndGeom и CRightView)

CRect rChild, rParent;

//=== Определяем экранные координаты (не клиентские!)

GetWindowRect(rChild) ;

m_pView->GetWindowRect (rParent) ;

//=== Если есть полосы прокрутки, то уменьшаем

//=== прямоугольник окна на толщину полос



Начало  Назад  Вперед



Книжный магазин