Код Символа

Тема в разделе "WASM.WIN32", создана пользователем ActioN, 5 июл 2005.

  1. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    В C++ Builder (и в VC++ наверное тоже) командой int(символ) получаем какой-то код клавиши

    например int(',') - код 44. А ASCII код символа ',' - 188. Какая между ними разница?

    Например в Edit'e пристутствует этот символ(,), то если применить команду wsprintf с 2-м

    параметром "%d" то получаю ASCII код этого символа. А как получить 2-й вариант кода?

    Скорее всего надо преобразовать символ в число. Но как это правильно сделать?
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    > "ASCII код символа ',' - 188"

    А с чего это ты взял ? Открой виндовую таблицу символов charmap.exe и убедись, что запятая стоит на 44й позиции (пробел = 32), а на 188-й какая-то фигня типа "ј".

    Про wsprintf я ничего не понял. А специально преобразовывать символ в число никак не надо, т.к. символ на уровне программы это и есть беззнаковое целое число размером в 1 байт. Поэтому достаточно простого приведения типов.



    PS: А-а, понял что тебе надо. Ты все перепутал: 44 - это и есть ASCII код символа "," а 188 - это virtual-key (VK) код нажатия клавиши ",". Для прообразования символа в VK-код в WinAPI есть функция VkKeyScan, а из VK в ASCII код символа MapVirtualKey.
     
  3. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Ну если проделываю вот это:

    invoke wsprintf,addr buf,%d,wParam;wParam - KeyCode

    invoke SetWindowText,hwndedit2,addr buf

    То получаю код запятой - 188, а нужно получить 44. Как это сделать?
     
  4. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    leo, если проделываю вот это(при нажатии клавиши в окне Edit'a):

    invoke wsprintf,addr buf,addr fmt,wParam;fmt - "%d"

    invoke SetWindowText,hwndedit,addr buf

    То получаю код запятой - 188, а нужно получить 44. Как это сделать?
     
  5. Kozyr__

    Kozyr__ New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2005
    Сообщения:
    213
    Адрес:
    Ukraine
    ActioN



    Тебе leo уже все объяснил:



    Для прообразования символа в VK-код в WinAPI есть функция VkKeyScan, а из VK в ASCII код символа MapVirtualKey.
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    ActioN

    invoke MapVirtualKey,wParam,2

    invoke wsprintf,addr buf,addr fmt,eax



    Еще можно транслировать сообщения WM_KEYDOWN в WM_CHAR с помощью TranslateMessage