На этом шаге мы рассмотрим применение переключателей доступности команд, использованных в программе 51 шага.
Использование переключателей позволяет нарисовать любые фигуры. Рассмотрим переключатели доступности команд для пунктов меню, в частности переключатель доступности CmEnableShapes():
void TWndw::CmEnableShapes (TCommandEnabler &commandEnabler) { TShapeMode shapeMode; switch (commandEnabler.Id) { case CM_PIXEL : shapeMode = mPixel; break; case CM_LINES : shapeMode = mLine; break; case CM_PIE : shapeMode = mPie; break; case CM_ELLIPSE: shapeMode = mEllipse; break; case CM_RNDRECT: shapeMode = mRndRect; break; case CM_ICON : shapeMode = mIcon; break; case CM_BITMAP : shapeMode = mBitmap;break; case CM_FILL : shapeMode = mFill; break; } if (shape == shapeMode) commandEnabler.SetCheck(TCommandEnabler::Checked); else commandEnabler.SetCheck(TCommandEnabler::Unchecked); }
Переключатель CmEnableShapes() имеет дело со всеми командами в меню Shape. Он проверяет поле Id полученного объекта типа TCoramandEnabler commandEnabler. Это поле содержит идентификатор команды, по которой была вызвана функция CmEnableShapes(). Используя идентификатор в операторе switch, переключатель доступности CmEnableShapes() может определить соответствие режима рисования разрешенной команды, и пометить (или не пометить) ее как отвечающую этому соответствию. Используя такой подход, вы можете избежать необходимости написания длинного списка переключателей доступности команд для команд меню, которые обрабатываются по точно такой же процедуре.
Отличайте переключатель доступности CmEnableShapes() от переключателей доступности команд manual и automatic из меню Options:
void TWndw::CmEnableManual (TCommandEnabler &commandEnabler) { if (operation == manual) commandEnabler.SetCheck(TCommandEnabler::Checked); else commandEnabler.SetCheck(TCommandEnabler::Unchecked); } void TWndw::CmEnableAuto (TCommandEnabler &commandEnabler) { if (operation == automatic) commandEnabler.SetCheck(TCommandEnabler::Checked); else commandEnabler.SetCheck(TCommandEnabler::Unchecked); }
Так как эти переключатели доступности команд выполняют точно такую же функцию, но для других команд, то их можно легко переписать как единый переключатель с помощью оператора switch. Однако при работе со всего лишь двумя командами меню, вероятно, легче все-таки придерживаться обычного текста программы.
Со следующего шага мы начнем знакомиться с элементами управления.