Сообщение EM_GETLINE - глюки?

Тема в разделе "WASM.BEGINNERS", создана пользователем ActioN, 8 окт 2005.

  1. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    Код (Text):
    1. invoke  SendMessage,hwndmemo1,EM_GETLINE,1,addr buffer
    2. invoke  MessageBox,0,addr buffer,0,0




    Если в memo1 содержится многострочный текст, то командой EM_GETLINE можно получить текст строки, указанной в wParam. Но почему-то при выполнении вышепреведенного кода в буффере пусто. Очень странно, что ни в туториалах к масму ни в примерах не нашел упоминание про команду EM_GETLINE. Почему так?
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    ActioN

    1) что возвращает SendMessage?

    2) сколько реально строк в hwndmemo1?

    3) ты в курсе, что "Edit controls: The copied line does not contain a terminating null character"?
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    Потому что есть MSDN. Не писать же туториалы и примеры к каждой функции WinApi
     
  4. leo

    leo Active Member

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

    Возможные подводные камушки:

    1) при вызове SendMessage первый word буфера должен содержать его длину - максимальное кол-во символов, которое можно в него скопировать (если 0, то ес-но ничего не копируется)

    2) нумерация строк в многострочном едите начинается с 0 (если у тебя всего одна строка, то ес-но при чтении строки №1 в буфер ничего не копируется)

    3) изложил q_q - скопированная строка не содержит замыкающего 0

    Поэтому правильно нужно делать так:
    Код (Text):
    1. bufsize equ 256
    2. buffer db bufsize dup (?)
    3. mov word ptr [buffer], bufsize-1 ;размер буфера
    4. invoke SendMessage, ...
    5. mov byte ptr [eax+buffer],0      ;замыкающий 0
     
  5. ActioN

    ActioN New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2005
    Сообщения:
    160
    Адрес:
    Ukraine
    IceStudent, в мсдн заглядывал, только не придал внимания lParam'y.

    leo, q_q, спасибо, все заработало.