Winapi опять воду мутит |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Winapi опять воду мутит |
TarasBer |
25.01.2012 15:35
Сообщение
#1
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Суть такова. Я написал свой аналог EDIT.
Все строки он хранит внутри себя в специальной структуре (заголовок я вообще не трогал), поэтому некоторые сообщения я подменил:
(это функции, которые возвращают суммарную длину строк из специальной структуры и копируют строки в подставляемый буфер) И решил его проверить. Почему-то функция, что берёт текст из него, возвращает мусор. Сначала я увидел, что L, который пришёл в функцию, нихрена не сопадает с указателем на буфер. И хотя в PChar(L) приходят верные символы, сама строка заполняется каким-то мусором. Потом я увидел, что если W=0, то в оконный буфер вообще ничего не приходит. В общем у меня вопрос - что за хрень происходит с сообщением после SendMessage? По-моему, оно должно просто сразу вызвать оконную функцию, вместо этого происходит что-то непонятное. Как вообще надо правильно отвечать на WM_GETTEXT? -------------------- |
TarasBer |
26.01.2012 10:05
Сообщение
#2
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
ОЛОЛО, я возвращал ноль, а надо было возвращать количество скопированных символов.
Программа заработала, но вопрос, почему в оконную функцию в LPARAM приходит указатель на место в стеке, остался. -------------------- |
TarasBer |
27.01.2012 12:37
Сообщение
#3
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Не, проблема не решена.
Я решил EM_GETLINE обработать. Посмотреть, какого хрена в строке мусор оказывается. Так вот, винда вообще не доносит сообщение до окна!!! То есть я посылаю SendMessage, но в оконную функцию ничего не приходит. Что делать и какого хрена? -------------------- |
IUnknown |
27.01.2012 12:52
Сообщение
#4
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
А можно посмотреть, как именно посылается EM_GETLINE? То есть, меня интересует, что делается с параметрами WPARAM/LPARAM перед посылкой сообщения. MSDN указывает конкретно, что надо сделать (MSDN -> EM_GETLINE message) :
Цитата Before sending the message, set the first word of this buffer to the size, in TCHARs, of the buffer. For ANSI text, this is the number of bytes; for Unicode text, this is the number of characters. The size in the first word is overwritten by the copied line. , это делается? |
TarasBer |
27.01.2012 13:12
Сообщение
#5
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> set the first word of this buffer to the size, in TCHARs, of the buffer
Нет, этого я не делал. Так блин, сообщение обрабатывает МОЁ окно, и здесь Я РЕШАЮ, как обработать сообщение, почему винда позволяет себе корёжить сообщение перед тем, как его донести до окна? Почему нельзя сразу сделать H->WndProc(H,M,W,L)? Короче, я вообще свои собственные константы на основе WM_USER сделал, с ними таких приколов нету. -------------------- |
IUnknown |
27.01.2012 13:21
Сообщение
#6
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата и здесь Я РЕШАЮ, как обработать сообщение Перед тем, как ТВОЕ окно обработает сообщение, ты нарушаешь контракт функции, чего ты от нее ждешь потом? Правильного функционирования? Обрабатывай, как хочешь, но перед этим необходимо, чтобы сообщение ДОШЛО до твоего окна. Пока контракт не выполнен - это может не произойти. Внимание, вопрос: "Кто виноват?" Ты, не соблюдая условия, которые тебе выставляет библиотека, или библиотека, "которая слишком тупая, и не понимает, что я хочу по-своему обработать стандартное сообщение"? Ну, обрабатывай... Если получишь...Сообщение отредактировано: IUnknown - 27.01.2012 13:22 |
Текстовая версия | 20.09.2024 19:22 |