Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Visual C++. MFC
Урок 24. Функции DDV

На этом занятии мы с вами рассмотрим функции DDV_... . Их, как и функций DDX_, достаточно много (мало того, вы сами можете определять свои собственные). Служат эти функции для проверки введенных пользователем данных. Типичный пример использования такой функции - это проверка, что введенное пользователем число лежит в определенном диапазоне.

Для конкретного примера возьмем программу, созданную на предыдущих двух уроках. Найдите в классе CMyDlg реализацию метода DoDataExchange и добавьте следующую строку:

void CMyDlg::DoDataExchange(CDataExchange* pDX){
 
     //обязательно вызываем родительский метод
 
     CDialog::DoDataExchange(pDX);
 
     //обмениваем данные с Edit'ом
 
     DDX_Text(pDX, IDC_EDIT1, m_sData);
 
     DDV_MaxChars(pDX, m_sData, 3);
 
     //обмениваем данные с CheckBox'ом
 
     DDX_Check(pDX, IDC_CHECK1, m_bCheck);
 
 }

Синтаксис у добавленной нами функции такой: первый параметр pDX (типа CDataExchange*) - это контекст обмена. Он нужен для функций DDX_ и DDV_ (например, он хранит информацию о том, куда движутся данные - от элементов управления к соответствующим переменным или обратно). Второй параметр - это переменная, связанная с нашим элеменом управления (именно на нее и накладываются некоторые ограничения). Третий и последующие параметры (если они есть) - это сами ограничения. В нашем случае мы добавили ограничение на максимальное число вводимых символов в нашем edit'е (три символа).

Вот еще несколько примеров функций DDV_ (у всех их них по четыре параметра):

DDV_MinMaxLong - для проверки, что некое число типа long лежит в некоторых пределах,

DDV_MinMaxInt - для проверки, что некое число типа int лежит в некоторых пределах,

DDV_MinMaxFloat - для проверки, что некое число типа float лежит в некоторых пределах.

Небольшое замечание по месту вызова DDV_ функций. Их рекомендуется вызывать сразу после соответствующей функции DDX_ (как в нашем примере: сначала мы вызвали функцию обмена DDX_Text(pDX, IDC_EDIT1, m_sData); для нашего edit'а и переменной m_sData, и сразу за этим функцию проверки DDV_MaxChars(pDX, m_sData, 3); для этой же переменной m_sData).

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



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS