![]() |
|
|
![]()
|
|
| NewLine |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Добрый день.
Скажите пожалуйста. У меня есть два приложения MDI с окном редактирования с классом унаследованным от CEditView class WinMess : public CEditView { } В этом приложении я отлавливаю нажатые клавиши. И второе приложение - консольное. В которое я передаю и пытасюь отображать эти символы. Так вот проблема. В MDI приложении все отображается нормально и на русском и на латинском, а вот в консольном приложении все отображается не правильно или какие-то ероглифы, или только на английском и только в большом регистре. Кто знает посоветуйте что-нить. А я что-то не могу разобраться с кодировками. Спасибо. --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
тему можно было бы и по-осмысленнее назвать: какое отношение имеет MDI к проблеме вывода русских символов в консоль?
и поиском можно было бы воспользоваться -- таких тем уже понаподнимали... http://forum.vingrad.ru/index.php?showtopic=94354 http://forum.vingrad.ru/index.php?showtopic=82380 http://forum.vingrad.ru/index.php?showtopic=22987 -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| NewLine |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Ну еще проблемма в том, что в консольное приложение передаются исключительно латинские буквы(A,B,C) и в добавок в большом регистре.
Как нужно передавать русские? Или их как-то нужно преобразовывать из латинских? --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
тут без кода что-то сложно сказать...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| NewLine |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Вот код отправляющий нажатые символы.
UINT s - коды нажатых символов. UINT s ловлю с помощью OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
Вот код принимающей стороны.
В любом случае отображаются латинские буквы в большем регистре. А русские что-то не отображаются. --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
что такое m_msg? что такое m_ptrComSocket?
что отладчик показывает при приеме? -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| NewLine |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
CString m_msg
m_ptrComSocket дескриптор сокета Отладчик показывает латинские буквы. И m_msg всегда показывает латинские буквы. AfxMessageBox(m_msg); --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
в таком случае в чем смысл этого:
(CString)m_msg и этого: sizeof(m_msg) оно вообще работать не должно... или ты сообщения короче 4-х символов передаеш? какого сокета? у CSocket' а нет метода Send... ты не буквы смотри а их коды -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| NewLine |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Еслиб я еще знал что с этим кодом делать.
Странно почему он в : public CEditView отображается нормально - по русски, а в AfxMessageBox(m_msg) - показывает латинскими.
Ну конечно может это преобоазование и не важно.
Я вообще пытаюсь передавать по одному символу.
Ну не знаю от так успешно все передает. А какой тогда нужно использовать? Я вообще пытаюсь передавать в консольное приложение коды клавишь и там их уже отображать. Но что-то пока ничего не получается. 1. В консольном приложении отображаются исключительно латинские буквы 2. Не оображаются управляющие клавиши типа Enter, BackSpace, ... Это сообщение отредактировал(а) NewLine - 17.10.2006, 14:00 --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
||||||
|
|||||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
||||
|
||||
| _hunter |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
я имел а виду смотри в отладчике не на chr (символ) или на всю строку целиком а на (int)chr
этого вообще быть не может. у тебя значит уже на передающей стороне косяк. а зачем говориш что хочеш передать 4?
потому как ты за слишком сложную задачу взялся. ты, для начала, строку константную передай... и, кстати, что ты таки посылаеш? -- коды клавиш (два байта) или символы (байт) поэтому я и спрашивал. а CAsyncSocket это, кажись, не CSocket... Добавлено @ 14:20 strlen(Buf) от такого: char* Buf = new char []; буффера вернет все что угодно кроме того, что тебе нужно (еденицы) -------------------- Tempora mutantur, et nos mutamur in illis... |
||||
|
|||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
||||
|
||||
| NewLine |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Ну вот я здесь отлавливаю событие. И он в class WinMess : public CEditView {} Отображается нормально, а в AfxMessageBox(ch) уже латинскими.
Задача поставлена такая. А константную строку я передавл(только в диалоговое окно и она передавалась.) Было бы не плохо передавать коды клавишь, но проблемма у меня остановилась на том, что функция int recv(SOCKET s, char* buf, int len, int flags); Принимает char* и не принимает int так как не видит конца строки. И что там потом делать с кодом клавиши я тоже не совсем понял.
И вообще что с кодом делать как его преобразовывать простым переопределением типа reinterpret_cast, dinamic_cast. --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
||||||||
|
|||||||||
| _hunter |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 5 Всего: 98 |
если раньше я отдельные моменты не понимал то теперь я не понимаю вообще ничего...
"он" это кто? в OnKeyDown (nChar) приходит virtual key code of the given key. он на русском (если именно это понимается под "Отображается нормально") быть никак не может. + это: что за прикол? ты некое число (которое к буквам имеет только косвенное отношение) приводиш к строке. что ты этим хочеш сказать -- непонятно...
ну так теперь через сокет передавай...
эта проблема решается банальным приведением типов. а именно: int code = 0; recv(s, (char*)&code, sizeof(code), flags); -------------------- Tempora mutantur, et nos mutamur in illis... |
||||||
|
|||||||
| NewLine |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Я так полагал что nChar это код нажатой клавиши и его соответственно можно как-то преобразовать и отобразить ввиде символа. И именно после такого преобразования CString ch=(CString)nChar; AfxMessageBox(ch); Он у меня и отображался. Как-то же можно преобразовать это виртуальный код и отобразить его?
Так передаются почему-то только латинские буквы. Конечно если я задам CString m_msg="п"; m_ptrComSocket->Send(m_msg, sizeof(m_msg)); Так оно успешно передаться и отобразится. А как от этого OnKeyDown (nChar) - virtual key code of the given key. получить русскую букву и передать ее я ума не приложу. Или как передать nChar с помощью Send(nChar) и уже в консольном приложении отобразить это символ. --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |