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


Отслеживание состояния команд - часть 4


Ее доступность зависит от того, в каком из окон находится фокус. Например, пусть обработчик находится в классе CLef tview. Если щелкнуть мышью правое окно, то команда будет недоступна. Она станет вновь доступной, если щелкнуть мышью левое окно. Рассмотрите самостоятельно варианты размещения обработчика В классах CTreeFrame, CMainFrame, (CDrawFrame?). Наряду с доступностью обсудите, как добывать адреса нужных объектов.

Мы решили поместить обработчик в класс документа, так как при этом команда будет относиться к окну CRightView активного документа, что логично. Известным вам способом создайте заготовку функции обработки команды ID_VIEW_ REFRESH и приведите ее в соответствие со следующим фрагментом:

void CTreeDoc::OnViewRefresh(void)

{

//====== Получаем адрес левого представления

CLeftView *pView = dynamic_cast<CLeftview*>

(GetView(RUNTIME_CLASS(CLeftView)));

//====== Запускаем цепочку действий для освежения

//====== содержимого правого окна

FreeDocs();

pView->SearchForDocs

(pView->GetPath(pView->m_Tree.GetSelectedItem()));

ProcessDocs();

}

Запустив приложение, вы опять получите сообщения об ошибках, и причины будут теми же. Вставьте в TreeDoc.cpp строку #include "Lef tview.h", а в Lef tview.h уберите упреждающее объявление класса CTreeDoc, но вставьте внутрь объявления класса CLef tview декларацию односторонней дружбы:

friend class CTreeDoc;

Теперь запуск должен пройти гладко. Проверьте работу команды View > Refresh, предварительно сохранив документ Save as в ту же папку, которая выбрана в левом окне.




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