Как связать ?

Тема в разделе "WASM.WIN32", создана пользователем REASY, 22 май 2008.

  1. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    Здравствуйте. У меня проблема. Я решил написать простенький редактор, который для ввода использует цифры(Т-9). Написал алгоритм преобразования словаря в hash таблицу(использовал std::map). А как теперь правильно ловить ввод и осуществить преобразование введенных цифр в слово. Я прикрепил к теме мой проект.

    PS: Заранее благодарю, и не бейте сильно за то что я коряво задаю вопросы
     
  2. jhons

    jhons New Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2007
    Сообщения:
    26
    судя по всему можно где то и здеся
    Код (Text):
    1. BOOL CNotepad_mfcDlg::PreTranslateMessage(MSG* pMsg)
    2. {
    3.     //то распахиваем окно на весь экран
    4.     //AfxGetMainWnd()->ShowWindow(SW_SHOWMAXIMIZED);
    5.     if (pMsg->message==WM_KEYDOWN)
    6.     {
    7.         if (pMsg->wParam  == VK_SPACE)
    8.         {
    9.             isSpace  = true;
    10.             str = "";
    11.         }
    12.         else
    13.             isSpace = false;
    14.        
    15.     if (pMsg->wParam  >= VK_NUMPAD1 && pMsg->wParam  <= VK_NUMPAD9)
    16.     {
    17.         str += (pMsg->wParam  - 0x60 + 0x30);
    18.        
    19.         pMsg->wParam = 70;
    20.        
    21.     }
    22.  
    23.     }
    24.    
    25.     return CDialog::PreTranslateMessage(pMsg);
    26. }
    ваще мне нравятся студии... оч позволяют не знать , нафига така структура MSG... например.
     
  3. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    jhons
    А к чему вообще это? Я попросил помощи, потому что сам не пойму как сделать. Лучше бы что нибудь толковое сказали....
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    REASY
    задачу можно свести к регулярному поиску в векторе возможных слов, где каждая цифра добавляет новый диапазон в шаблон и поиск повторяется. Это простой метод, но не оптимальный.
     
  5. jhons

    jhons New Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2007
    Сообщения:
    26
    вобще то это ответ на вопрос
    вот еще на всяк случай http://www.cyberguru.ru/programming/win32/win32-keyboard-page3.html
    зы: прозьба ... рассмотрите внимательно участок вашей программы , который привел выше.... сдеся http://www.cyberguru.ru/programming/win32/win32-keyboard-page14.html даже с примерчиком ... просто сравните... плиз.
     
  6. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    Вот вкратце что делает программа.
    После запуска смотрит есть ли файл hashDic.txt, если есть, то он загружает из нее данные в map<string, string> hashTable, если отсутствует hashDic.txt, то просить выбрать файл-словарь и из этого словаря генерируется хеш-таблица.
    Хеш-таблица имеет вид:
    435-hel:gel:
    3327-dear:
    374363-friend:
    2-a:b:c:
    3-d:e:f:
    ....
    т.е. допустим,hashTable["435"] = "hel:gel:". А теперь я прощу Вас помочь мне организовать ввод, то есть, когда мы набираем цифры под NumLock, то программа находит, какому слову (словам) соответствует введенная цифра(например, ввели 4, и получается hashTable["4"] ="g:h:i:" и в Edit'е появляется буква g[если пользователь ничего не нажимал в течении секунды, то появляется ListBox со всеми вариантами слов, где можно выбрать нужное]
     
  7. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    Мда....
    Так что тут есть человек, который мне поможет ?
     
  8. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    REASY
    Недопонял, какой помощи вы хотите? как ловить нажатия на цифровые кнопки? Или как заполнить массив ссылок на строки (n=n*10+key_n)?
     
  9. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    оффтоп: (С) кто-то "если бы все силы которые тратят прогамисты на написание ноутпадов пустить в нужное русло..." то дальше там не помню что произойдет :)
     
  10. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    tylerdurden
    он _охрененно_ навариться на них:)
     
  11. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    _basmp_
    Как ловить нажатия на цифровые кнопки, и отобразить слово в Edite'e
     
  12. jhons

    jhons New Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2007
    Сообщения:
    26
    пардон может быть слишком сложно изъясняюсь, но ознакомтесь что есмь структура MSG, на кой она нужна и какие функции с оной работают. ... ну например - поймать клавишу - ловить вм_кейдаун, написать в едите - кинуть ему по хендлу ту же структуру.
    или вы ждете что напишуть за вас ...
    зы: не думаю , если бы писали код представленный вами вручную - у вас бы возникли подобные проблемы. пардон.
     
  13. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    при том что с некоторых пор notepad опенсорц то вобще странно :)
     
  14. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    Видели как работает Т-9, допустим, на Sony Ericsson(W700). Щелкая на цифры, мы набираем слова. Сама "ловля" нажатия и помешение его в EditBox дело не сказать что из трудных, но я ПРОЩУ помочь именно вывод в Edit слова, набранного с помощью цифровых клавиш.
    jhons
    Проблема не в том что есть struct MSG и какие функции с ней работают, а как ГРАМОТНО СДЕЛАТЬ ЭТОТ ВВОД. Допустим мы вводим 564236 424 3342 и у нас в Edit"е выводится:"привет как дела".
    tylerdurden
    Очень умно, видно можете заниматься только пустословием?!?! Или я не правильно вопрос задаю ?
     
  15. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    добавь в message-map CEdit'a ON_EN_CHANGE.
     
  16. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    n0name
    Сообщение ON_EN_CHANGE уже передает в Edit символ, нужно обрабатывать перед передачей символа.
     
  17. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    REASY
    Если я правильно понял: есть список слов, каждому слову соответствует строка из цифр. Пользователь вводит х (где х - одна или больше цифр), и нужно найти все слова, цифровое представление которых начинается с x (никогда не видел T9, поэтому возможно повторяюсь). Если так, то hash table тебе ничего не даст, слова нужно организовывать в дерево. По сути ты имеешь дело с частным случаем префиксного кода и работать с ним надо точно так же, как и с любым другим.
     
  18. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    Stiver
    Набору цифр соответствует слово или несколько слов. Находить эти слова не нужно. У нас имеется map hashTable. Мы просто собираем нажатые цифры(от пробела до пробела) и получаем прямой доступ к словам через индекс.
     
  19. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    REASY
    винАПИ. Умозрительно.
    сабкласируете Едит контрол. В вашем обработчике ловите WM_CHAR (WM_KEYDOWN?) вынимаете из wParam очередную цифру, получаете новый вариант слова (предыдущие цифры хранить надо тоже или делать дерево или другой поиск), выделяете уже введеное (EM_SETSEL, EM_EXSETSEL), посылаете новый вариант (EM_REPLACESEL). Посылать или не посылать WM_CHAR в оригинальный едит проц - решайте сами, только цифру на букву поменять не забудьте. Во всех остальных случаях - оригинальный обработчик.
    У вас таблица, но ни в коем случае не хеш. Хеш подходит тут очень мало.