Есть компонент 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
RF>Как это лучше сделать? Какую функцию лучше переопределять--OnKeyDown или OnKeyUp ?
Для ввода цифр лучше переопределить OnChar, а для всяких стрелок до шифтов OnKeyDown, т.к. нужен собственный обработчик, а не дополненный как в OnChar (сначала вызываем CEdit::OnChar, потом смотрим, вторая ли цифра и что-то делаем дополнительно).
Здравствуйте, Carc, Вы писали:
RF>>Как это лучше сделать? Какую функцию лучше переопределять--OnKeyDown или OnKeyUp ? C>Для ввода цифр лучше переопределить OnChar, а для всяких стрелок до шифтов OnKeyDown, т.к. нужен собственный обработчик, а не дополненный как в OnChar (сначала вызываем CEdit::OnChar, потом смотрим, вторая ли цифра и что-то делаем дополнительно).
А в OnKeyDown нельзя всё это вместе поместить? (Чтобы было всё в одной функции, а не в двух?)
1613 г. = 2024 г.
Re[3]: Переопределение методов OnKeyDown и OnKeyUp класса CEdit
В строке ichar = nChar; в обеих функциях я поставил точки останова, однако при запуске отладчика у меня не произошло остановки на этих точках--вместо этого в текстовом поле отобразилась цифра, которую я вводил.
В чём причина этого? (у меня стоит Visual C++ 2008).
1613 г. = 2024 г.
Re: Переопределение методов OnKeyDown и OnKeyUp класса CEdit
Здравствуйте, RussianFellow, Вы писали:
RF>Как это лучше сделать? Какую функцию лучше переопределять--OnKeyDown или OnKeyUp ?
Используй CMFCMaskedEdit, этот класс решает твои задачи, но если есть нужда писать свой код, то в качестве прототипа в помощь исходники, тем более, что они очень простые для понимания. В карте событий идет обработка:
ON_WM_CHAR()
ON_WM_KEYDOWN()
Re[2]: Переопределение методов OnKeyDown и OnKeyUp класса CEdit
В связи с этим мне не совсем понятно, что означают параметры у этого метода?
И если я хочу сделать так, чтобы в текстовом поле отображалось ' . ' (то есть два пробела перед точкой, точка, шесть пробелов после точки--без кавычек), пользователь может вводить только цифры (символы '0', '1', '2', '3', '4', '5', '6', '7', '8', '9') и при вводе эти цифры отображаются, а при нажатии на клавишу "забой" на месте цифры появлялся бы пробел--то как мне это сделать?