Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: (faq)???±???°?±???‚???° ???????±?‰?µ?????? ?????‡?µ?????µ???? ???????°  (Прочитано 50206 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 19-10-2005 13:50 » 

Если я не ошибаюсь, то окно родитель получает сообщения дочернего окна.
Пытаюсь обработать сообщение WM_KEYDOWN в главном окне программы которое приходит на дочерний edit.
Но реакция идет только от нажатия кнопки при фокусе на главном окне, при написании в едите (когда пользователь набивает в нем текст) сообщение не обрабатывается.
Код:
	while (GetMessage(&msg, NULL, 0, 0)) 
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))  //Может здесь что изменить
{
TranslateMessage(&msg); 
DispatchMessage(&msg);
}
}
   
return msg.wParam;
}
...
...
...

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
...
...

case WM_KEYDOWN:
           
MessageBox(hWnd,"KEYDOWN","",MB_OK);
break;
[quote][/quote]
« Последнее редактирование: 30-04-2007 16:34 от Алексей1153++ » Записан

ещё один вопрос ...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 19-10-2005 14:06 » 

Сообшение обрабатывается только одним окном, его можно транслировать в другие окна. Функция TranslateAccelerator служит для других целей. В принципе ты можеш поставить фильтр сообшение в этот цикл. TranslateAccelerator является одним из фильтров. Эта функция отыскивает акселераторы и обрабатывает их соответствуюше.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 19-10-2005 14:11 » 

Получается мне нужно написать обработчик сообщений для едита, который будет перенаправлять эти сообщение окну-родителю. Или есть другой способ?
Записан

ещё один вопрос ...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 19-10-2005 14:19 » 

А зачем тебе нужно обрабатывать одно и тоже сообшение два раза?
Вот что написано в WM_KEYDOWN
Цитата
Return Values

An application should return zero if it processes this message.
Попробуй вернуть не нуль. Тут возможны два пути. Или сообшение будет потеряно, Или оно будет обработано родителем. Но точно не могу сказать.
 
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 19-10-2005 14:27 » 

Цитата
//обработчик для главного окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
...
case WM_KEYDOWN:
           
         MessageBox(hWnd,"KEYDOWN","",MB_OK);
         break;
return 1;
Ты это имеешь ввиду. Если да, то это не то что надо. Я хочу в обработчике сообщений для главного окна обработать сообщение WM_KEYDOWN, которое будет посылаться дочернему едиту.
Записан

ещё один вопрос ...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 19-10-2005 14:35 » new

Зачем?
Можно сделать главное окно активным. И уже из него транслировать сообшение в дочернее окно.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 19-10-2005 14:45 » 

Но реакция идет только от нажатия кнопки при фокусе на главном окне, при написании в едите (когда пользователь набивает в нем текст) сообщение не обрабатывается.

Всё правильно, так оно и есть. Сообщение получает только окно находящееся в фокусе. Для такого случая предусмотрены нотификации  - например при измененнении содержимого Edit-контрола он посылает родительскому окну EN_CHANGE-Notification. Посмотри MSDN или Петцольда на эту тему.
А иначе - нелогично получается - у меня окно с 5ю едитами пользователь нажимает А, родительское окно отлавливает его, а  в какой контрол писать? Поэтому каждый контрол обрабатывает сообщение сам.  В конечном итоге родительскому окну не всегда надо об этом знать.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 19-10-2005 19:47 » 

В принципе я это и имел ввиду. Только это не совсем разумно. Так не делают. Лучше сделать как посоветовал Джон. Ты оформляеш класс своей компоненты. В классе предусматриваеш функцию обратного вызова. Если главному окну нужно тоже отрабатывать какое либо действие. Оно может просто подсунуть свою функцию.
В коде это будет выглядеть примерно так.
Код:
//Определение типа функции обратного вызова.
typedef void (*TOnKey)(HWND, int , int);

//Определение твоего класса компоненты

class edit
{
  edit(void);
  void SetOnKey(TOnKey ok);
private:
TOnKey *OnKey;
  int WmKeyDown(........);
};

edit::edit(void)
{
   OnKey=NULL;
................
}

void edit::SetOnKey(TOnKey *ok)
{
   OnKey=ok;
}

int WmKeyDown(........)
{
    ........................
   if (OnKey) OnKey(.............);
}


//Ну и уже сам твоя функция
void MyOnKey(HWND, int , int)
{
..............................
}

Я не ручаюсь за ошибки, не проверял.

Второй способ. Через PostMessage просто отсылаеш на родительское окно сообшение.
« Последнее редактирование: 19-10-2005 19:49 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 20-10-2005 08:45 » 

Ок, сам  посмотрел - у Петцольда Том 1 Глава 8 с 421

Коды уведомления управляющих окон редактирования

Окна редактирования посылают оконной процедуре родительского окна сообщения WM_COMMAND. Значения переменных lParam и wParam, являющихся параметрами этих сообщений такие же, как и для кнопок управления:

Параметр   Описание
LOWORD (wParam)   Идентификатор дочернего окна
HIWORD (wParam)   Код уведомления
lParam   Описатель дочернего окна

Ниже представлены коды уведомления управляющих окон редактирования:
EN_SETFOCUS   Окно получило фокус ввода
EN_KILLFOCUS   Окно потеряло фокус ввода
EN_CHANGE   Содержимое окна будет меняться
EN_UPDATE   Содержимое окна изменилось
EN_ERRSPACE   Произошло переполнение буфера редактирования
EN_MAXTEXT   Произошло переполнение буфера редактирования при вставке
EN_HSCROLL   На горизонтальной полосе прокрутки был щелчок мышью
EN_VSCROLL   На вертикальной полосе прокрутки был щелчок мышью

Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #9 : 20-10-2005 12:38 » 

Джон, насколько я понял nikedeforest сам делает компоненту и назвал ее Edit.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 20-10-2005 13:10 » 

Finch, сейчас буду разщбираться с кодом, который ты мне скинул постом выше. Просто пока хотел внести ясность.
Цитата
Джон, насколько я понял nikedeforest сам делает компоненту и назвал ее Edit.
Я рассматриваю это как вариант, но не очень то охота с этим возиться. Я вообще-то рад пользовваться предопределенным классом EDIT (CreateWindow("EDIT")), если вы мне скажите как решить проблему того, чтобы я мог обрабатывать сообщения WM_KEYDOWN и WM_CHAR которые ему приходят.
Я поясню что мне надо. Мне нужно засекать время нажатия клавиши (когда пользователь пишет в едите) и время между нажатиями клавиши. Т.е. пользовательпишет в едите текст и я замеряю время нажатия клавиш которые он нажимает и время между нажатиями. Я не знаю как прикрутть обработчик сообщения к окну котооре создано таким образом CreateWindow("EDIT","PASSWORD",WM_CHILD,10,10,125,20,hWnd,NULL,NULL) (может какой параметр забыл, набивал по памяти). Я сначала думал, что окно-родитель будет получать сообщения едита и тогда, я бы в обработчике сообщения WM_KEYDOWN для родительского окна делал все эти замеры, но сообщение родителю не приходит. Я не знаю как прикрутиить обработчик сообщения к окну типа BUTTON, EDIT и прочие, поэтому пока единственным вариантом, пока я вижу только создание своего контрола, который по сути должен будет сочетать в себе все функции(возможности) едита и который будет имтеь функцию обратного вызова, в которой я смогу обрабатывать сообщение WM_KEYDOWN и другие. Если вы мне предложите способ по проще, то я буду только рад, т.к. свой контро делать не очень охота, возни много.
« Последнее редактирование: 20-10-2005 13:14 от nikedeforest » Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 20-10-2005 13:16 » 

Не думаю
Цитата
Пытаюсь обработать сообщение WM_KEYDOWN в главном окне программы которое приходит на дочерний edit.
Похоже, что у него стандартное окошко класса EDIT. Просто он на него враппер сделал (наверное к МФЦ подбирается Улыбаюсь )
Ну даже если если это его собственный контрол, что мешает сделать его правильно и использовать стандартный механизм передачи сообщений? Во всяком случае он пытается сделать наоборот - передавать сообщения (исконно контрольные) от родительского окна - дочернему.
Принцип простой - например контрол получает сообщение WM_CHAR - зачем диалогу надо это знать?
Тем более в первую очередь! Если это ему всё-таки потребуется, то родительсое окно должно обрабатывать нотификации (notification) дочернего окна. А оно в свою оченедь должно позаботится от этом. Тогда будет совместимость свнизу-вверх. Те он сможет "втыкать" этот контрол в другие "стандартные" родительские окна.

Если взять пример того же Петцольда, то в WinProc у него стоит
Код:
...
case WM_COMMAND :
               if (LOWORD (wParam) == 1)
                    if (HIWORD (wParam) == EN_ERRSPACE ||
                        HIWORD (wParam) == EN_MAXTEXT)

...

те если ты поменяешь "его" контрол на "свой", написанный по всем "правилам" - то всё будет работать и дальше. Без доработки и изменений родительского окна.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #12 : 20-10-2005 13:19 » 

Ну тогда смело используй совет Джона. (Он плохого не посоветует Улыбаюсь ) И перехватывай сообшение WM_COMMAND в родительском окне.

Джон, поэтому то я и спрашивал, зачем он хочет головой вниз все сделать.
« Последнее редактирование: 20-10-2005 13:23 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 20-10-2005 13:26 » 

Я изменил свое последнее сообщение, т.к. я случайно его отправил недописав, посмотрите пожалуйтса.
Цитата
Похоже, что у него стандартное окошко класса EDIT. Просто он на него враппер сделал (наверное к МФЦ подбирается  )
Точно.
Цитата
Во всяком случае он пытается сделать наоборот - передавать сообщения (исконно контрольные) от родительского окна - дочернему.
Нет, наоборот, от едита к родителю.
Цитата
перехватывай сообшение WM_COMMAND в родительском окне.

Не понимаю, при чем тут WM_COMMAND, и чей WM_COMMAND перехватывать, да и как, хук ставить?
Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 20-10-2005 13:27 » 

Я сначала думал, что окно-родитель будет получать сообщения едита

Я не знаю как прикрутиить обработчик сообщения к окну типа BUTTON, EDIT и прочие

Читай Петцольда - вот в этой главе он очень много про кнопи рассказыват
« Последнее редактирование: 18-03-2007 20:17 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 20-10-2005 13:33 » 

Я скачиваю, но мне кажется я читал ту главу (правда выборочно) и там такого ирзврата нет, ктому же не кнопка нужна, которая посылает WM_COMMAND, а нужен EDIT, который ничего не посылает (по крайней мере он не посылает WM_KEYDOWN, который мне так необходим).
Записан

ещё один вопрос ...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #16 : 20-10-2005 13:38 » 

Хук никуда не надо ставить. Просто когда ты делаеш обработчик сообшений родительского окна, также в него включи обработку сообшения WM_COMMAND и у сё. А сами сообшения будут сами автоматом идти. Если ты их не отрабатываеш, то по умолчанию они будут отрабатываться в DefWindowProc.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 20-10-2005 13:43 » 

Насколько я понял я могу получить от едита WM_COMMAND. Так что ли?
Но чем оно мне поможет не пойму.
Все врубился WM_COMMAND посылается от ЕДИТА, но в упор не вижу как это поможет мне в решение моей проблемы.
« Последнее редактирование: 20-10-2005 13:46 от nikedeforest » Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 20-10-2005 13:45 » 

nikedeforest, так всё спокойно. Разбираемся

1. Каждый контрол находясь в фокусе получает сообщения
2. Сообщать о таких событиях родительскому он МОЖЕТ, но НЕ ОБЯЗАН с помощью нотификаций (notification) - не знаю как по русский - переводчик Петцольда называт их "уведомлениями". Пусть будет так.
3. Они представляют собой обыкновенные идентификаторы под виндой принято их имена начинаит с сокращений типа LBN_ лисбокс нотификейшн EN_ едит нотификейшн  CBN_ комбобокс нотификейшн и тд
4. Родительскому окну они передаются с помощью сообщения WM_COMMAND

Цитата: MSDN
EN_CHANGE
The EN_CHANGE notification message is sent when the user has taken an action that may have altered text in an edit control. Unlike the EN_UPDATE notification message, this notification message is sent after the system updates the screen. The parent window of the edit control receives this notification message through a WM_COMMAND message.

LRESULT CALLBACK WindowProc(
  HWND hwnd,       // handle to window
  UINT uMsg,       // WM_COMMAND
  WPARAM wParam,   // edit control identifier, EN_CHANGE
  LPARAM lParam    // handle to edit control (HWND)
);
Parameters
wParam
The low-order word specifies the edit control identifier.
The high-order word specifies the notification message.

lParam
Handle to the edit control.
« Последнее редактирование: 20-10-2005 13:53 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #19 : 20-10-2005 13:46 » 

Джон любезно предоставил информацию
Цитата
Ниже представлены коды уведомления управляющих окон редактирования:
EN_SETFOCUS   Окно получило фокус ввода
EN_KILLFOCUS   Окно потеряло фокус ввода
EN_CHANGE   Содержимое окна будет меняться
EN_UPDATE   Содержимое окна изменилось
EN_ERRSPACE   Произошло переполнение буфера редактирования
EN_MAXTEXT   Произошло переполнение буфера редактирования при вставке
EN_HSCROLL   На горизонтальной полосе прокрутки был щелчок мышью
EN_VSCROLL   На вертикальной полосе прокрутки был щелчок мышью
Особенно интересно наверно будет уведомление EN_CHANGE
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #20 : 20-10-2005 13:50 » 

Насколько я понял я могу получить от едита WM_COMMAND. Так что ли?
Но чем оно мне поможет не пойму.
Все врубился WM_COMMAND посылается от ЕДИТА, но в упор не вижу как это поможет мне в решение моей проблемы.

зы nikedeforest, Не обижайся, но у меня такое ощущение, что ты невнимательно посты читаешь.
или ты уже перешёл в режим насыщения, тогда просто на сегодня забудь про это, почитай книгу, посмотри киношку, а про это вообще не думай. А завтра с утра посмотри - и всё станет понятно.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #21 : 20-10-2005 13:57 » 

Вот ещё немного теории из MSDN

Цитата: MSDN
Edit Control Notification Messages
The user makes editing requests by using the keyboard and mouse. The system sends each request to the edit control's parent window in the form of a WM_COMMAND message. The message includes the edit control identifier in the low-order word of the wParam parameter, the handle of the edit control in the lParam parameter, and an edit control notification message corresponding to the user's action in the high-order word of the wParam parameter.


An application should examine each notification message and respond appropriately. The following table lists each edit control notification message and the action that generates it.

Notification message User action
EN_CHANGE The user has modified text in an edit control. The system updates the display before sending this message (unlike EN_UPDATE).
EN_ERRSPACE The edit control cannot allocate enough memory to meet a specific request.
EN_HSCROLL The user has clicked the edit control's horizontal scroll bar. The system sends this message before updating the screen.
EN_KILLFOCUS The user has selected another control.
EN_MAXTEXT While inserting text, the user has exceeded the specified number of characters for the edit control. Insertion has been truncated. This message is also sent either when an edit control does not have the ES_AUTOHSCROLL style and the number of characters to be inserted exceeds the width of the edit control or when an edit control does not have the ES_AUTOVSCROLL style and the total number of lines to be inserted exceeds the height of the edit control.
EN_SETFOCUS The user has selected this edit control.
EN_UPDATE The user has altered the text in the edit control and the system is about to display the new text. The system sends this message after formatting the text, but before displaying it, so that the application can resize the edit control window.
EN_VSCROLL The user has clicked the edit control's vertical scroll bar or has scrolled the mouse wheel over the edit control. The system sends this message before updating the screen. 
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 20-10-2005 13:57 » 

Так, я немного успокоился Улыбаюсь. Стало яснее (хотя я с этим еще не сталкивался, наверное проблемы первый раз будут), но не представляю как EN_CHANGE  поможет мне засечь время нажатия клавиши. С помощью EN_CHANGE можно попробовать засечь временные интервалы между нажатиями клавиш (вполне вариант), но и то не точно, точнее сказать, будети засекаться интервал между печатью символов в едите, а это не то что надо.
Мне нужно опрделеялть время нажатия клавиши и интервал между нажатиями клавиш при печати в едите.
Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #23 : 20-10-2005 14:09 » 

А зачем тебе для этого в родительское окно чего-то передавать? Пусть ЕДИТ сам меряет. А потом - что значит "время нажатия клавиши"? если не ошибаюсь после 0,4 секунды она начинает сама повторятся.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 20-10-2005 14:21 » 

Цитата
Пусть ЕДИТ сам меряет.
Согласен, но я не знаю как это реализовать.
Если можно было бы повесить CALLBACK-функцию для едита и там поставить обработчик сообщения WM_KEYDOWN, то все было бы ОК, а как по другому я не знаю.
Цитата
если не ошибаюсь после 0,4 секунды она начинает сама повторятся.
Там меряются милисекунды. Эта программа должна осуществлять идентификацию человека по клавиатурному почерку.
« Последнее редактирование: 20-10-2005 14:30 от nikedeforest » Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #25 : 20-10-2005 14:32 » 

Эта программа должна осуществлять идентификацию человека по клавиатурному почерку.

Ааааахренеть. Я думаю, что такие вещи надо делать на уровне дров. Отправка сообщений в этом случае будет ооооооочень медленная. Пока его в очередь поставять, пока то, пока сё. Масса времени уйдёт на графическое отображение (обычно это самая медленная часть) изменённой графической инфы на экране.Замечал когда-нибудь, что при загруженном компе текст отображается гораздо позже - из буфера.  И тд и тп. Так что я бы посоветовал использовать прерывания клавы для таких вещей.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 20-10-2005 14:38 » 

Не-не-не-не-не. Джон, не усложняй мне жизнь, это не коммерческий проект, это банальное знакомство с методами защиты информации. Препод смам в курсе, что это все лажа, так для галочки пишем. Поэтому никаких усложнений пожалуйста.
Ты писал
Цитата
Пусть ЕДИТ сам меряет.
как мне это провернуть?

Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #27 : 20-10-2005 14:56 » 

Тогда "для грязноты эксперимента" надо ввести доп. условия. Например - мы будем измерять время между двумя WM_KEYDOWN - будет этого достаточно?

зы Если не сложно - выложи в ЗИПе свой проект - ту его часть, где ЕДИТ сообщения обрабатыват, а то я ленивый - не хочу с нуля начинать (тем более APIшный). Ага
« Последнее редактирование: 20-10-2005 14:58 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 20-10-2005 15:15 » 

Цитата
Например - мы будем измерять время между двумя WM_KEYDOWN - будет этого достаточно?
Не совсем, желательно конечно измерять время между WM_KEYDOWN и WM_KEYUP. Ну ты покажи как сделать с WM_KEYDOWN, ну а дальше я уж сам.
По поводу проекта, я тебе кинул на е-мэйл, но там  ничего еще нет по той простой причине, что я не знаю с чего и как к этому едиту подступиться со стороны этих сообщений.
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #29 : 20-10-2005 17:25 » 

У меня сейчас 2 идеи по этому поводу:
1) В главном окне обрабатывать WM_COMMAND от едита и как только от едита придет уведомление EN_SETFOCUS убивать фокус едита и кидать его на главное окно (выразился каряво). Врезультате главное окно будет обрабатывать сообщения WM_CHAR, WM_KEYDOWN и прочие котоорые идут ему при нажатии клавиш, а затем символы заносить в едит. Врезультате создастся иллюзия, что юзвер печатает в едите, а на самом деле он будет печатать на окне, но отображаться все будет в едите. Самое главное все красиво провернуть, каретку отображать на едите, когда фокус на главном окне(если это реально) и прочее. Я наверное каряво объяснил всю эту идею, но Finch должен понять, т.к. он эту идею сам предлагал, еще практически в самом начале. Но это каряво и как сказал Finch: "так никто не делает " и  я с этим согласен.
2)Создать свой контрол, который будет похож как 2 капли воды на едит (т.к. мне едит и нужен), но будет иметь большой плюс - давать возможность мне обрабатывать кучу всяких сообщений (ням, ням Улыбаюсь).
Если никто больше ничего интересного не предложит, то я остановлюсь на втором варианте, т.к. других идей у меня нет Жаль.  
зы. Джон, сейчас посмотрю что ты мне оставил, спасибо. Хотя у меня муражки по коже от мысли, что он на МФЦ Ага.
ззы. Прокомментируешь мои идеи?
зззы. А сколько у тебя сейчас времени, что ты до сих пор на работе, я например хочу по раньше спать лечь и это по раньше скоро настанет. Я к тому, что я думаю поспать, а та в это время еще работаешь Улыбаюсь.
Записан

ещё один вопрос ...
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines