Выбор драйвера
После того как все драйверы DirectDraw будут перечислены, функция
OnCreate() выбирает один из них. Выбор драйвера по умолчанию может быть переопределен в производных классах с помощью виртуальной функции
SelectDriver(). Возвращаясь к
листингу 3.1, мы видим, что величина, возвращаемая функцией
SelectDriver(), используется в качестве индекса массива
driver (причем значения индекса начинаются с нуля). Индекс показывает, какой GUID (и, следовательно, драйвер) должен использоваться для инициализации DirectDraw. Версия
SelectDriver() из класса
DirectDrawWin выглядит так:
virtual int SelectDriver() { return 0; }
|
По умолчанию
SelectDriver() возвращает 0, тем самым показывая, что должно использоваться первичное видеоустройство. Чтобы изменить ее поведение, следует переопределить
SelectDriver() в классе, производном от
DirectDrawWin. В нашем примере класс
BounceWin переопределяет
SelectDriver() так, чтобы в случае обнаружения нескольких драйверов выводилось меню:
int bounceWin::SelectDriver() { int numdrivers=GetNumDrivers(); if (numdrivers==1) return 0; CArray<CString, CString> drivers; for (int i=0;i<numdrivers;i++) { LPSTR desc, name; GetDriverInfo( i, 0, &desc, &name ); drivers.Add(desc); } DriverDialog dialog; dialog.SetContents( &drivers ); if (dialog.DoModal()!=IDOK) return -1; return dialog.GetSelection(); }
|
Эта функция сначала определяет количество обнаруженных драйверов с помощью функции
GetNumDrivers(), которая просто возвращает значение закрытой переменной
totaldrivers. Если в системе обнаружен всего один драйвер, выводить меню незачем, поэтому функция возвращает 0, чтобы использовался первичный драйвер.
Если в системе доступно несколько драйверов, функция
SelectDriver() создает меню, состоящее из строк с описаниями драйверов. Класс
DriverDialog (простой класс диалогового окна, сгенерированный ClassWizard) выводит диалоговое окно, в котором пользователь может выбрать нужный драйвер. На
Рисунок 3.9 изображено такое окно с двумя строками: первичным драйвером и драйвером DirectX 2 для видеокарты Orchid Righteous 3D.
Классы, производные от
DirectDrawWin, могут реализовать функцию
SelectDriver() и другими способами. Приведенная здесь реализация отличается простотой и гибкостью, но возможно, вам захочется инициализировать каждый драйвер и проверить его на наличие конкретных возможностей. В некоторых приложениях функция
SelectDriver() может использоваться для выбора драйвера, лучше всего отвечающего заданным критериям.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий