Реализация "пополнения вкладки" в RichEdit Winapi - PullRequest
0 голосов
/ 08 июня 2018

Это функция, которую вы видите во многих клиентах IRC.По сути, если вы наберете строку «Ad», а затем нажмете «Tab», клиент заполнит первый соответствующий ник (в случае IRC-клиента), добавив «Ad», поэтому допустим, что он заполняет Adam.Но, как и в bash, если вы продолжаете нажимать на вкладку, она должна циклически проходить по всем именам, содержащим «Ad» в качестве префикса.

Я не совсем уверен, как реализовать это в Wndproc для RichEdit.В частности, когда пользователь нажимает на вкладку, мне нужно получить текущий 'токен', сохранить его, получить все префиксы и заполнить первый.Если он снова нажимает tab, мне нужно получить следующий префикс и так далее, но мне нужно очистить список префиксов, как только я получу WM_CHAR, это not tab - я думаю?

Мне интересно, есть ли какой-нибудь более простой, менее хакерский способ или кто-нибудь видел код, который делает это?

Спасибо.

1 Ответ

0 голосов
/ 08 июня 2018

Хотя комментарии Реми и полезны, мне кажется, что этот вопрос больше о том, какой должна быть логика 1002 * для реализации автозаполнения в стиле bash, чем что-либо еще.Исходя из этого и основываясь на том, что вы опубликовали, что показалось мне немного запутанным, я думаю, что это должно быть что-то вроде этого (псевдокод);

int autocomplete_index = 0;
string autocomplete_prefix;

on_tab:
    if (autocomplete_prefix == "")
    {
        autocomplete_prefix = current_contents_of_edit_field ();
        autocomplete_index = 0;
    }

    auto autocomplete_result = get_autocomplete_string (autocomplete_prefix, autocomplete_index++);
    if (autocomplete_result != "")
        replace_contents_of_edit_field_and_move_caret_to_end (autocomplete_result);
    else
        beep ();  // or cycle round
    done;

on_any_other_char:
    autocomplete_prefix = "";

Если элемент управления rich edit встроен в диалогВы также должны убедиться, что менеджер диалогов не говорит и не вводит VK_TAB перед тем, как вы это сделаете.Обычно этого не происходит для элементов управления расширенного редактирования (хотя это происходит для обычных элементов управления редактированием - см. Рисунок), но если это произойдет, вы можете соответствующим образом обработать WM_GETDLGCODE в своем WndProc (подробности по запросу).

И 'Hacky?Зачем?Я так не думаю.Звучит как хорошая идея для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...