Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Дополнительные методы, связанные с полем редактирования.




DWORD GetEditSel( ) const;

Получает начальную и конечную позиции в текущей отметке строки в поле редактирования.

Возвращает двойное слово. Начальная позиция (номер символа) содержится в младшем (low-order) слове, конечная позиция (первый невыделенный символ) - в старшем (high-order) слове. Если Combo box используется без поля редактирования, выдается CB_ERR.

Пример:

DWORD dwCurSel = m_combobox.GetEditSel();

WORD dStart = LOWORD(dwCurSel);

WORD dEnd = HIWORD(dwCurSel);

BOOL SetEditSel( int nStartChar, int nEndChar );

Отмечает символы в поле редактирования. Чтобы выбрать первую позицию, вы должны указать начальную позицию (nStartChar) 0. Чтобы отметить до четвертой позиции включительно, вы должны указать номер первой позиции, следующей за отмеченной nEndChar=4.

nStartChar –означает начальную позицию отметки (счет с нуля). Если она равна –1, удалить существующую отметку.

 nEndChar –означает конечную позицию (номер первого символа за отмеченным). Если она равна –1, Помечается весь текст.

Возвращает CB_ERR, если ComboBox имеет стиль DROPDOWNLIST.

Пример:

if (dwCurSel != CB_ERR)

   m_combobox.SetEditSel(dStart, dEnd);

CWnd::GetWindowText

int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;

void GetWindowText( CString& rString ) const;

Копирует заголовок окна в буфер (lpszStringBuf) или строку (rString). Если окно является control (в нашем случае полем редактирования), копирует текст из поля редактирования.

Возвращает длину строки в байтах, не включая символ конца. Возвращает 0, если нет текста.

nMaxCountозначает максимальное количество символов, которое может быть скопировано в буфер. Если строка длиннее, она обрезается.

CString str;

GetWindowText(str);

int nLength = str.GetLength();

void SetWindowText( LPCTSTR lpszString );

Копирует строку (lpszString) в заголовок окна. Если окно является control (в нашем случае полем редактирования), копирует строку в поле редактирования.

lpszString – указатель на строку.

SetWindowText(str);

int GetLBText( int nIndex, LPTSTR lpszText ) const;

void GetLBText( int nIndex, CString& rString ) const;

Получает строку из Listbox.

nIndex означает индекс строки, если индекс меньше нуля, или больше предельного значения возвращается CB_ERR.

lpszText означает указатель на буфер, который должен получить строку. Буфер должен иметь достаточно места и иметь символ конца строки. Размер строки должен быть определен заранее с помощью метода GetTextLen.

rString - Ссылка на объект класса CString.

Возвращает длину строки в байтах включая символ конца строки. Возвращает ошибку LB_ERR, если возникает ошибка в индексе.

int SetItemData( int nIndex, DWORD dwItemData );

устанавливает 32-разрядное значение связанное с выбранным элементом

nIndex означает индекс элемента, который должен быть установлен,

dwItemData означает новое значение элемента.

DWORD GetItemData( int nIndex ) const;

Извлекает 32-разрядное значение связанное с выбранным элементом

nIndex означает индекс элемента в списке.

Список может получать:

ON_WM_CHARTOITEM - Обработчик сообщения для списков не имеющих строковых элементов получает сообщение WM_CHAR.

ON_WM_VKEYTOITEM - Уведомление о нажатии кнопки

VK_SHIFT, VK_CONTROL, VK_ ALT и т.д.

VK_DOWN)

VK_UP, VK_RIGHT, VK_LEFT, VK_ESCAPE, VK_RETURN,

VK_SPACE VK_DELETE , VK_BACK

 

Использование элементов типа переключатель (флажки, радио-кнопки). Статические поля (Static text). Окна редактирования (Edit box). Методы класса CEdit.

Использование элементов типа переключатель.

Можно так организовать программу, что по умолчанию будет выбран один из переключателей.

Для выбора одного из переключателей в группе диалогового окна необходимо добавить следующий текст в функцию CSDIDialog::0nInitDialog():

m_radio = 1;

UpdateData(FALSE);

Членом-переменной является m_radio, с которым связана группа переключателей. Она (переменная) представляет собой индекс выбранного переключателя в этой группе элементов управления (как всегда, индекс начинается с 0). Значение индекса 1 соответствует второму переключателю в группе. Вызов функции UpdateData() в этом фрагменте обновляет содержимое элементов управления диалогового окна соответственно состоянию связанных с ними переменных-членов. Аргумент функции UpdateData() указывает направление передачи данных: UpdateData(TRUE) обновило бы содержимое переменных соответственно элементам управления, т.е. переписало бы в m_radio индекс выбранного в группе переключателя.

В отличие от списка группа переключателей доступна и после того, как диалоговое окно убрано с экрана. Так что вам не придется добавлять что-либо в функции ОnОК() и OnCanceI(). Вместо этого у вас будет другая проблема – как преобразовать целое значение индекса в строковое выражение, которое нужно будет добавить в "хвост" текста сообщения в переменную msg. Существует множество ее решений, включая функцию-член Format() класса CString, но в данном случае можно поступить гораздо проще – использовать оператор switch, поскольку индекс может принимать лишь ограниченное множество значений. В конец текста функции CSDIApp::InitInstance(), перед вызовом AfxMessageBox(), добавьте несколько строк, представленных в листинге.

Строки, которые следует включить в функцию CSDIApp::InitInstance():


msg += "\г\п";

msg += "Radio Selection: ";


Switch (dig.m_radio)

{case 0:

msg += "O";

break;

case 1:

msg += "1";

break;

case 2:

msg += "2";

break;

default:

msg += "none";

break;}


Первая из новых строк добавляет в сообщение два специальных символа – перевод каретки \r и перевод строки \n,  которые в совокупности представляют маркер конца строки Windows. В результате дальнейшая часть сообщения msg начнется с новой строки.

"Статические поля (класс static)"

Статическое окно управления - это окно, создаваемое на базе класса ”CStatic”.Статические окна нельзя использовать для управления работой приложения: они не воспринимают щелчки мыши и не обрабатывают сообщения от клавиатуры, не посылает родительскому окну сообщение WM_COMMAND. Обычно этот орган управления используется для оформления внешнего вида диалоговых панелей или окон приложения. Все сообщения от мыши через “прозрачное” окно статического дочернего окна попадают в родительское окно.


Рассмотрим некоторые стили статического окна

Статический класс окон включает в себя три стиля текста – SS_LEFT, SS_RIGHT и SS_CENTER. Они предназначены для выравнивания текста соответственно по левому краю, правому краю и центру.Текст задается в параметре текста окна функции SetWindowText.

Класс CEdit

Класс CEdit обеспечивает функционирование элемента управления «окно редактирования» (Edit box). Окно редактирования – это окно, в котором пользователь может вводить и редактировать текст.

CEdit наследует методы от CWnd. Чтобы установить или получить текст из окна CEdit можно пользоваться методами CWnd SetWindowText и GetWindowText. Даже в случае многострочного окна. А также, если окно многострочное, получать или устанавливать часть текста путем вызова методов GetLine, SetSel, GetSel, ReplaceSel.

Если хотите обрабатывать уведомляющие сообщения Windows, посылаемые окном редактирования диалоговому окну, нужно добавить обработчики сообщений в класс диалога.

Список возможных сообщений от CEdit:

EN_CHANGE содержимое окна будет меняться. Так же как и EN_UPDATE сообщение посылается после того, как Windows обновит экран.

EN_ERRSPACE – поле редактирования не имеет достаточно памяти.

EN_HSCROLL – – на горизонтальной полосе прокрутки был щелчок мышью.. Родительское окно извещается прежде, чем экран обновится.

EN_KILLFOCUS – окно редактирования потеряло фокус ввода.

EN_MAXTEXT – Текущая вставка превысила заданное число символов для окна редактирования и будет урезана. Также посылается , когда окно редактирования на имеет стиля ES_AUTOHSCROLL и число символов, которое должно быть вставлено превысит ширину окна. Также посылается, когда окно не имеет стиля ES_AUTOVSCROLL и общее число строк будет превышать высоту окна редактирования.

EN_SETFOCUS – посылается, когда окно редактирования получает входной фокус.

EN_UPDATE – содержимое окна изменилось. Посылается после того, как окно отформатировало текст, но перед тем, как изобразить его на экране, так что размер окна может быть изменен, если необходимо.

EN_VSCROLL – – на вертикальной полосе прокрутки был щелчок мышью. Родительское окно извещается прежде, чем экран изменится.

Если вы создаете объект CEdit внутри диалогового окна, он разрушается автоматически, когда пользователь закроет окно диалога.

Управляющие окна редактирования хранят текст в области памяти программы (в адресном пространстве программы). Содержимое управляющих полей редактирования ограничено примерно 32 килобайтами.










Последнее изменение этой страницы: 2018-04-12; просмотров: 240.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...