Переопределение методов OnKeyDown и OnKeyUp класса CEdit
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 19.07.16 11:35
Оценка:
Есть компонент IDC_EDIT1 и соответствующая ему переменная m_IDC_EDIT1 . В нём находится текст, состоящий из символа точки--то есть '.' .

Я хочу создать класс CMyEdit, производный от класса CEdit, в котором был бы переопределён метод OnKeyDown и/или OnKeyUp. Переменная m_IDC_EDIT1 будет относиться к типу CMyEdit .
В этой функции должно быть следующее:
1) перед точкой вводятся две цифры;
2) если была введена вторая цифра, то курсор перемещается не на позицию точки, а на позицию после неё;
3) если была нажата кнопка "стрелка вправо" на цифре перед точкой, то курсор перемещается на позицию после точки;
4) если была нажата кнопка "стрелка влево" на цифре после точки, то курсор перемещается на цифру перед точкой;
5) если была нажата клавиша "забой" на цифре после точки, то происходит перемещение курсора на позицию перед точкой, точка остаётся (не убирается), а убирается цифра перед точкой;
6) должны работать комбинации клавиш Shift-"стрелка вправо", Shift-"стрелка влево", Shift-пробел для выделения информации в IDC_EDIT1 (здесь символ точки выступает как обычный символ).

То есть должна быть обеспечена работа для ввода вещественного числа в обычной (не экспоненциальной) форме, у которого перед точкой было бы две цифры и при котором кнопки "стрелка вправо", "стрелка влево", "забой" не затрагивали бы эту точку.

Как это лучше сделать? Какую функцию лучше переопределять--OnKeyDown или OnKeyUp ?
1613 г. = 2024 г.
Re: Переопределение методов OnKeyDown и OnKeyUp класса CEdit
От: Carc Россия https://vk.com/gosha_mazov
Дата: 19.07.16 11:58
Оценка:
RF>Как это лучше сделать? Какую функцию лучше переопределять--OnKeyDown или OnKeyUp ?
Для ввода цифр лучше переопределить OnChar, а для всяких стрелок до шифтов OnKeyDown, т.к. нужен собственный обработчик, а не дополненный как в OnChar (сначала вызываем CEdit::OnChar, потом смотрим, вторая ли цифра и что-то делаем дополнительно).
Aml Pages Home
Re[2]: Переопределение методов OnKeyDown и OnKeyUp класса CEdit
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 19.07.16 12:40
Оценка:
Здравствуйте, Carc, Вы писали:

RF>>Как это лучше сделать? Какую функцию лучше переопределять--OnKeyDown или OnKeyUp ?

C>Для ввода цифр лучше переопределить OnChar, а для всяких стрелок до шифтов OnKeyDown, т.к. нужен собственный обработчик, а не дополненный как в OnChar (сначала вызываем CEdit::OnChar, потом смотрим, вторая ли цифра и что-то делаем дополнительно).

А в OnKeyDown нельзя всё это вместе поместить? (Чтобы было всё в одной функции, а не в двух?)
1613 г. = 2024 г.
Re[3]: Переопределение методов OnKeyDown и OnKeyUp класса CEdit
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 19.07.16 14:13
Оценка:
Я создал класс CMyEdit как потомок от класса CEdit. В нём я определил функции OnKeyDown и OnChar.
В функции CMyEdit::OnKeyDown я написал такой код:

void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
unsigned int ichar;

ichar = nChar;
}

А в функции CMyEdit::OnChar я написал следующее:

void CMyEdit::OnCHar(UINT nChar, UINT nRepCnt, UINT nFLags)
{
CEdit::OnChar(nChar, nRepCnt, nFlags);

unsigned int ichar;

ichar = nChar;
}

В строке ichar = nChar; в обеих функциях я поставил точки останова, однако при запуске отладчика у меня не произошло остановки на этих точках--вместо этого в текстовом поле отобразилась цифра, которую я вводил.
В чём причина этого? (у меня стоит Visual C++ 2008).
1613 г. = 2024 г.
Re: Переопределение методов OnKeyDown и OnKeyUp класса CEdit
От: peterbes Россия  
Дата: 19.07.16 14:27
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Как это лучше сделать? Какую функцию лучше переопределять--OnKeyDown или OnKeyUp ?


Используй CMFCMaskedEdit, этот класс решает твои задачи, но если есть нужда писать свой код, то в качестве прототипа в помощь исходники, тем более, что они очень простые для понимания. В карте событий идет обработка:
    ON_WM_CHAR()
    ON_WM_KEYDOWN()
Re[2]: Переопределение методов OnKeyDown и OnKeyUp класса CEdit
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 20.07.16 14:07
Оценка:
Здравствуйте, peterbes, Вы писали:

P>Используй CMFCMaskedEdit, этот класс решает твои задачи


Прочитал про класс CMFCMaskedEdit:

https://msdn.microsoft.com/ru-ru/library/bb982230.aspx

Прочитал про метод CMFCMaskedEdit::EnableMask :

https://msdn.microsoft.com/ru-ru/library/bb983268.aspx

В связи с этим мне не совсем понятно, что означают параметры у этого метода?
И если я хочу сделать так, чтобы в текстовом поле отображалось ' . ' (то есть два пробела перед точкой, точка, шесть пробелов после точки--без кавычек), пользователь может вводить только цифры (символы '0', '1', '2', '3', '4', '5', '6', '7', '8', '9') и при вводе эти цифры отображаются, а при нажатии на клавишу "забой" на месте цифры появлялся бы пробел--то как мне это сделать?
1613 г. = 2024 г.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.