Повторное использование элемента управления Edit в качестве командного окна

Это приложение с графическим интерфейсом (на самом деле MFC). Мне нужно командное окно с возможностью отображения подсказки, например:

Имя любимой порнозвезды:

Пользователь должен иметь возможность вводить текст после такой подсказки:

Имя любимой порнозвезды: Рэйвен Райли

Но мне нужно запретить пользователю перемещать курсор в область подсказки. Пользователям также следует запретить возвращаться назад в подсказку, чтобы предотвратить следующее:

Ррравен Рррили Руууулез!!! Имя любимой порнозвезды:

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

Будет ли лучше создать свой собственный класс окна с нуля (т.е. наследовать от CWnd) или мне следует повторно использовать элемент управления Windows EDIT (т.е. наследовать от CEdit)?

Аналогичное командное окно можно увидеть в AutoCAD и Visual Studio (в режиме отладки).


person Agnel Kurian    schedule 03.10.2008    source источник
comment
Порнозвезда? Зачем рисковать наступательным флагом?   -  person Aardvark    schedule 03.10.2008
comment
Просто пытаюсь оживить ситуацию. Никаких обид не имел в виду.   -  person Agnel Kurian    schedule 06.10.2008


Ответы (2)


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

В любом случае, если вы действительно хотите реализовать свой собственный элемент управления (в конце концов, это не так сложно), я рекомендую вам прочитать «техническую документацию» Джейкоба Навиа о том, как он создал компилятор LCC и среду. На самом деле кажется, что документы больше не доступны в сети, но я уверен, что вы можете получить их по его электронной почте ([email protected]).

Редактировать: мне больше понравился ваш предыдущий пример. Держись стильно, лол :)

person dguaraglia    schedule 03.10.2008
comment
:) Я не хотел, чтобы меня забанили. - person Agnel Kurian; 03.10.2008

У меня было очень похожее требование, и я сделал именно то, что предложил Дэвид; подклассы управления редактированием и фильтрация нажатий клавиш. На самом деле это было использование Qt, а не MFC, но принцип будет точно таким же.

Вы должны не забыть фильтровать такие клавиши, как home, а также left и backspace. Я только что проверил, переместит ли курсор курсор в подсказку и проигнорировал ли он нажатие клавиши.

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

person David Dibben    schedule 03.10.2008