![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Окно ввода
Окно ввода будет последним элементом управления, который мы добавим в диалог в этой главе. Окна ввода применяются для ввода текстовых строк. Перед добавлением окна ввода в программе необходимо описать его в файле ресурсов. В данном случае следует изменить Mydialog.rc так, чтобы описание диалога выглядело следующим образом:
MYDB DIALOG 18, 18, 142, 92 CAPTION " Первый диалог" STYLE DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENU { DEFPUSHBUTTON " Красный", IDD_RED, 57, 45, 36, 14, WS_CHILD|WS_VISIBLE|WS_TABSTOP PUSHBUTTON " Зеленый", IDD_GREEN, 95, 45, 36, 14, WS_CHILD|WS_VISIBLE|WS_TABSTOP PUSHBUTTON " Сброс", IDCANCEL, 52, 65, 37, 14, WS_CHILD|WS_VISIBLE|WS_TABSTOP PUSHBUTTON " Выбери фрукт", IDD_SELFRUIT, 2, 45, 50, 14, WS_CHILD|WS_VISIBLE|WS_TABSTOP PUSHBUTTON " Конец ввода", IDOK, 68, 22, 60, 14, WS_CHILD|WS_VISIBLE|WS_TABSTOP LISTBOX ID_LB1, 2, 10, 47, 28, LBS_NOTIFY|WS_CHILD| WS_VISIBLE|WS_BORDER|WSJVSCROLL|WS_TABSTOP EDITTEXT ID_EB1, 68, 8, 72, 12, ES_LEFT| ES_AUTOHSCROLL|WS_CHILD|WS_VISIBLE|WS_BORDER| WS_TABSTOP
Рис. 5.2. Пример диалога со списком
В этой версии файла ресурсов добавлена кнопка Конец ввода, нажатие которой означает окончание ввода текста. Кроме того, добавлено само окно ввода. Оператор EDITTEXT создает окно ввода в диалоге:
EDITTEXT ID, X, Y, Width, Height[, стиль]
Здесь ID задает идентификатор элемента управления, Х и Y – координаты его верхнего левого угла, Width и Height – размеры, а стиль определяет его внешний вид (стили, которые могут быть использованы, приведены в табл. 5.1). Затем в Mydialog.h нужно добавить следующее макроопределение:
#define ID_ED1 107
Окна ввода могут не только принимать сообщения, но и генерировать их. Однако в нашем примере обработка всех сообщений не требуется. Вы увидите, что окна ввода автоматически выполняют все необходимые действия для редактирования текста, так что в процессе ввода текста Вашей программе не нужно будет взаимодействовать с окном ввода, – ей потребуется просто решить, когда следует получить текущее содержимое окна ввода. Для этого следует использовать функцию API GetDlgItemText():
UINT GetDlgltemText(HWND hdwnd, int nID, LPSTR lpstr, int nMax);
Эта функция копирует содержимое окна ввода в строку-буфер, указатель на которую передается в параметре lpstr. При этом копируется не более nMax символов. Параметр hdwnd передает дескриптор окна диалога, a nID – идентификатор окна ввода. Чтобы добавить в программу работу с окном ввода, дополните вложенный оператор switch в DialogFunc() приведенным ниже фрагментом кода. При нажатии кнопки Конец ввода откроется окно сообщения, содержащее текущий текст окна ввода.
case IDOK: // Нажата кнопка " Конец ввода", // показать содержимое окна ввода GetDlgItemText(hdwnd, ID_EB1, str, 80); MessageBox(hdwnd, str, " Содержимое окна ввода", MB_OK); return 1;
Макроимя IDOK было ранее определено в Windows.h.
Пример 5-3. С помощью сравнительно небольшой модификации программа, приведенная в примере 2, превращается в приложение с окном ввода. Проделайте эти изменения самостоятельно. На рис. 5.3 представлен результат работы программы с окном ввода.
|