Правильно обработать нотификацию

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Правильно обработать нотификацию

Сообщение SLIM » 09.08.2010 (Пн) 23:04

Если есть задача обрабатывать сообщения нотификации от разных контролов, как правильнее это сделать? Ведь в lparam передаются разные струкутуры.
Однако, как я заметил, каждая имеет поле code - содержащее сообщение. А вот оно уже специфично для контрола.
Но есть и исключения. Например NM_DBLCLK может прийти от разных органов. Есть способ проверить конечно.

Но вопрос в основном вот в чем.
Использовать один case для обработки code?
Пишите жизнь на чистовик.....переписать не удастся.....

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Правильно обработать нотификацию

Сообщение alibek » 10.08.2010 (Вт) 8:27

Case то зачем?
Lasciate ogni speranza, voi ch'entrate.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Правильно обработать нотификацию

Сообщение SLIM » 10.08.2010 (Вт) 18:19

Ну как минимум для выбора обработки нескольких сообщений от одного органа.
А вообще я имел ввиду что-то типа (на С++)
Код: Выделить всё
switch (lpNMHDR->code)
      {
         case NM_DBLCLK:
                        ............
                        case NM_CLICK:
                        ............
                        case LVN_COLUMNCLICK:
                        ............
                 }
Пишите жизнь на чистовик.....переписать не удастся.....

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Правильно обработать нотификацию

Сообщение BV » 10.08.2010 (Вт) 20:17

SLIM писал(а):Но вопрос в основном вот в чем.Использовать один case для обработки code?

Не использовать его вообще. Почитай описание WM_NOTIFY, в частности, что приходит в wParam, а так же почитай описание NMHDR, который общий для всех уведомлений. Там есть полезные поля, помимо code
Логика проста. Если на форме только один э.у., то нет смысла различать уведомления по э.у.
Если много, то сначала проверяется одно из вышеуказанных мной значений, затем идет switch на код уведомления
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


Вернуться в Windows-программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList