Уроки Iczelion'а



         

Урок 22. Суперклассинг


В этом туториале мы изучим суперклассинг, что это такое и для чего он служит. Вы также узнаете, как pеализовать навигацию с помощью клавиши 'Tab' в вашем окне.

Скачайте пример здесь.

Теория:

Во время вашей программной карьеры, вы наверняка встретитесь с ситуацией, когда вам потребуется несколько контролов с *несколько* отличным поведением. Hапример, вам могут потребоваться 10 edit control'ов, которые принимают только число. Есть несколько путей достигнуть цели:

  • Создать собственный класс и написать контролы с нуля
  • Создать эти edit control'ы и сабклассировать каждый из них
  • Суперклассировать edit control

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

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

Hиже приведены шаги для суперклассинга:

  • вызвать функцию GetClassInfoEx, чтобы получить информацию о классе окна, который вы хотите суперклассировать. GetClassInfoEx требует указатель на структуру WNDCLASSEX, которая будет заполнена информацией, если вызов пройдет успешно.
  • Изменяйте требуемые параметры WNDCLASSEX. Тем не менее, если два члена, которые вы должны обязательно изменить:

  • hInstance - Вы должны поместить в это поле хэндл программы.
  • lpszClassName - вы должны поместить сюда указатель на новое имя класса.
  • Вы не обязаны изменять параметр lрfnWndрroc, но обычно вам будет это нужно делать. Главное не забудьте сохранить старое значение lpfnWndproc, если вам надо будет его вызывать с помощью CallWindowproc.




Содержание  Назад  Вперед