Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
каркас.doc
Скачиваний:
59
Добавлен:
03.06.2015
Размер:
1.6 Mб
Скачать

5.8. Окно ввода

Окно ввода будет последним элементом управления, который мы добавим в диалог в этой главе. Окна ввода применяются для ввода текстовых строк. Перед добавлением окна ввода в программе необходимо описать его в файле ресурсов. В данном случае следует изменить 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 представлен результат работы программы с окном ввода.