> в Visual studio 6 проблем не было, а в .net стало юолее > строже, так вот как преобразовать??? > обычные конструкции типа (CString)переменная не проходят
а что ты подрузумеваеш под преобразованием unsigned int 16 битного чесла
в CString(это посути дела указатель на массив unsigned char)???
[C++] Насколько я знаю, в CString по-прежнему есть метод Format24.03.03 22:05 Автор: Ktirf <Æ Rusakov> Статус: Elderman
Я могу ошибаться, но по-моему Format, как и printf, возвращает число записанных символов... :(
Стоп! Так тебе в результате нужно получить в строке число или символ? Если второе (я сильно подозреваю, что так), то проще всего явным образом привести nChar к char/wchar_t (нужное выбрать). С соответствущими проверками, естественно. По-моему, это самый корректный вариант.
[C++] Стоп, а тебе что нужно в строке?28.03.03 21:30 Автор: iokana <iokana jon> Статус: Member
> > > > void CxxxxxView::OnChar(UINT nChar, UINT nRepCnt, > UINT > > nFlags) > > { > > . > > . > > CxxxxxDoc* pDoc = GetDocument(); > > ASSERT_VALID(pDoc); > > // pDoc->s += nChar; так было исходно и в 6-м > > работало > > pDoc->s += s.Format("%u", nChar); > > Я могу ошибаться, но по-моему Format, как и printf, > возвращает число записанных символов... :( > > Стоп! Так тебе в результате нужно получить в строке число > или символ? Если второе (я сильно подозреваю, что так), то > проще всего явным образом привести nChar к char/wchar_t > (нужное выбрать). С соответствущими проверками, > естественно. По-моему, это самый корректный вариант.
надо чтобы в методе OnDraw выводилось то, что вводиться с клавиатуры
значиться делалось:
в хххDoc.h создавалась просто буфер хранения введенного - пременная CString StringData;
в хххDoc.срр она инициалировалась StringData = "";
а само нажатие читалось
void CxxxView::OnChar(UINT nChar, UINT RepCnt, UINT nFlags)
{
> void CxxxView::OnChar(UINT nChar, UINT RepCnt, UINT nFlags) > { > > CxxxDoc* pDoc = GetDocument(); > ASSERT_VALID(pDoc); > pDoc->StringData += nChar; > Invalidate(); > } > на что при компиляции писалось - operator += is ambiguous > чё ту не ясного или двусмысленного я так пока и не понял??? Двусмысленность в том, что UINT может трактоваться либо как многобайтовый символ (напрмер, символ Unicode), либо как число. Если ты его насильно приведешь к unsigned wchar_t или даже просто к unsigned char, неоднозначность исчезнет. Советую, впрочем, проверять, что на самом деле находится в этом UINT, а потом уже приводить, а то мало ли...
[C++] Стоп, а тебе что нужно в строке?31.03.03 18:39 Автор: iokana <iokana jon> Статус: Member
> ambiguous > > чё ту не ясного или двусмысленного я так пока и не > понял??? > Двусмысленность в том, что UINT может трактоваться либо как > многобайтовый символ (напрмер, символ Unicode), либо как > число. Если ты его насильно приведешь к unsigned wchar_t > или даже просто к unsigned char, неоднозначность исчезнет. > Советую, впрочем, проверять, что на самом деле находится в > этом UINT, а потом уже приводить, а то мало ли... реальный пример [этого дела] привести можешь?? заранее спасибо..
[C++] Ты хочешь пример неудачного приведения к char или пример проверки UINT'а?31.03.03 19:09 Автор: Ktirf <Æ Rusakov> Статус: Elderman
Начнем с неудачного приведения. Если мы просто пишем TCHAR(nChar), то в теории подвох очевиден - у UINT область определения больше, и если значение в UINT вылезает за пределы TCHAR, приведение проходит неправильно. На практике фигня вылезает в другом месте, потому что в MSDN этот самый UINT, за исключением некоторого списка значений, лежащих в пределах области определения TCHAR считается displayable characters, из чего я делаю вывод, что на самом деле все, что приходит в nChar, вполне приводимо к TCHAR. А вот в списке исключений находится, например, такое смешное значение как 08 (backspace). Соответственно, в наивной реализации (как у тебя) этот backspace благополучно запишется в строку. Ты уверен, что именно это тебе нужно? :)
Честно говоря, все вышесказанное относится не к CWnd::OnChar, а к событию WM_CHAR как таковому, но я не думаю, что перед вызовом OnChar дефолтный TranslateMessage отсекает спецсимволы - это было бы нелогично, потому что спецсимволы тоже могут быть полезны.
Сорри за кучу подробностей, но думаю, что так лучше :)
Что касается примера - в ссылке находится страничка MSDN, на которой рассказывает об использовании события WM_CHAR. Твоя задача взять switch, который там написан, и заполнить его необходимым.