| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > вставить или добавить символ в wstring |
| Автор: ksili 28.10.2008, 11:45 |
| Есть код символа типа int. Надо вставить его между конкретными символами в строке типа wstring (т.е. insert, а не поверх другого символа). Ну или хотя бы разобраться как его добавить в конец. Добавлено через 6 минут и 15 секунд у типа wstring есть методы _Insert и insert, но что-то я не врубаюсь в их параметры |
| Автор: mrbrooks 28.10.2008, 11:58 |
| ksili, ну дык там есть параметры в методе - позиция и сам символ. собственно этого и должно быть достаточно. Добавлено через 10 минут и 12 секунд через знак + |
| Автор: ksili 28.10.2008, 12:16 |
через знак + не добавляются ни int, ни char Кроме них там, есть другие непонятные параметры с именами _Off, _Where, _Int_iterator_tag и др. вот их и не осилил. insert'ом вообще символ вставить можно? или только строку? |
| Автор: Dmi3ev 28.10.2008, 12:52 | ||
а если append попробовать или:
|
| Автор: ksili 28.10.2008, 13:29 | ||
Вот так прокатило:
Но почему-то добавляемые буквы приводятся к верхнему регистру. Если использовать не wstring wch; а wchar_t wch[1];, то почему-то добавляет по два символа, один нормальный а один глючный, как будто wchar_t занимает 4 байта. |
| Автор: ИванМ 28.10.2008, 13:35 |
| Ну просто int обычно занимает 4 байта. А wchar_t 2. |
| Автор: ksili 28.10.2008, 14:03 |
| Как победить приведение к верхнему регистру? |
| Автор: ksili 28.10.2008, 15:46 |
| Продолжаю разбираться с приведением к верхнему регистру. Оказывается такой код символа уже приходит в параметрах сообщения WM_KEYDOWN. Странно как-то. Вот помню в Билдере есть две функции соответствующие - OnKeyDown и OnKeyPress. И кажется OnKeyPress поинтеллектуальнее. Но вот сообщения WM_KEYPRESS нету, а жаль. Вообще приложение пишется под Windows Mobile. И когда я запускаю эмулятор девайса, там можно как в настоящем устройстве открывать и пользоваться виртуальной клавиатурой. Так вот даже там, нажимай хоть маленькие буквы, хоть большие - печатаются большие. |
| Автор: mrbrooks 28.10.2008, 16:30 |
| ksili, Дык обожди. Ты что делаешь то вообще? Может решение совсем другое нужно. Раз пишешь под Mobile - если с гуем - то чисто на WinAPI или при промощи MFC? |
| Автор: 586 28.10.2008, 18:11 |
Есть сообщение WM_CHAR. Добавлено через 4 минуты и 53 секунды и WM_UNICHAR |
| Автор: J0ker 28.10.2008, 19:03 | ||||
потому, что форма insert'a которую вы используете, вставляет СТРОКУ а не символ правильное использование:
|
| Автор: ksili 28.10.2008, 19:22 |
| чисто на WinAPI Попробую WM_CHAR и WM_UNICHAR |
| Автор: J0ker 28.10.2008, 19:32 | ||
вы путаете виртуальный код и код символа вам определенно надо ловить WM_CHAR объясняю как происходит процесс когда вы нажимаете клавишу, клавиатура выбрасывает код - т.н. скэн-код, его ловит драйвер и затем пересылает окну с фокусом ввода в виде WM_KEYDOWN - в нем присутствует скэн-код в lParam (который может различаться для одной и той-же клавиши - все зависит от производителя), и виртуальный код в wParam - который уже от производителя не зависит - это внутренний код ОС - это просто трансляция скэн-кодов в универсальный внутренний код ОС. Т.к. клавиша для строчной и заглавной буквы одна, то и виртуальный код (и скэн-код) тоже ОДИН и тот-же - эти коды просто определяют конкретную клавишу, а то, что виртуальный код совпадает с кодом СИМВОЛА заглавной буквы - просто СОВПАДЕНИЕ (намеренное конечно - так проще). Далее... Когда WM_KEYDOWN ловится обработчиком очереди сообщений (если вы конечно его не перекрыли ручками |
| Автор: ksili 29.10.2008, 05:01 | ||
Т.е. WM_KEYDOWN перекрывать нежелательно? Оно у меня уже используется для обработки нажатий стрелок курсора, home, end и др непечатных клавиш. Они будут в WM_CHAR попадать? И ещё мне надо будет делать обработку одновременного нажатия Shift и стрелок. |
| Автор: J0ker 29.10.2008, 06:48 | ||||
если вы не перехватили обработчик очереди сообщений то вы ничего не перекрываете - OnKeyDown вызывает обработчик в WM_CHAR попадают только печатаемые символы для обработки стрелок + shift надо обрабатывать WM_KEYDOWN или/и WM_KEYUP и проверять состояние shift через GetKeyState(VK_LSHIFT) & (unsigned short)0x8000 и GetKeyState(VK_RSHIFT) & (unsigned short)0x8000 Добавлено через 5 минут и 46 секунд если вам нужно проверить оба шифта - (GetKeyState(VK_LSHIFT) | GetKeyState(VK_RSHIFT)) & (unsigned short)0x8000 |