Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с WM_NOTIFY 
V
    Опции темы
yngwie19
Дата 20.1.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Всем привет. В книге Финогенова "Основы программирования WIN32 ", описывается механизм распаковщиков сообщений или макросов сообщений. В частности  дается макрос HANDLE_MSG(hwnd, WM_NOTIFY,OnNotify), однако Я не могу найти где он определен, чтобы посмотреть как он разворачивается. Вообще другие используемые в книге макросы Я смотрел в windowsx.h, но как разворачивается WM_NOTIFY Я там не нашел. Может подскажите где он тогда определен? 
PM MAIL   Вверх
dumb
Дата 21.1.2009, 04:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



PM MAIL   Вверх
yngwie19
Дата 21.1.2009, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



dumb, Спасибо.
PM MAIL   Вверх
yngwie19
Дата 21.1.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Ребят подскажите как расшифровывается тип одно из параметром этого сообщения - LPNMHDR. Может так его легче будет запомнить.
PM MAIL   Вверх
S.A.G.
Дата 21.1.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



Длинный указатель на структуру NMHDR. В том же Финогенове рассказывается и о венгерской нотации.

Код

typedef struct tagNMHDR {
    HWND hwndFrom;
    UINT_PTR idFrom;
    UINT code;
} NMHDR;


Структура содержит инфу о произошедшем событии. hwndFrom - хэндл того, от кого пришло, idFrom - его id, code - код уведомления.

Это сообщение отредактировал(а) S.A.G. - 21.1.2009, 22:16


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
yngwie19
Дата 21.1.2009, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



S.A.G., кстати по Финогенову, не работает следующая фишка:

Код

LRESULT OnNotify(HWND, int, LPNMHDR lParam)                                          // Функция развернута из макроса
{
    if(lParam->code == TTN_NEEDTEXT)
    {
        LPTOOLTIPTEXT lpttt = (LPTOOLTIPTEXT)lParam;         // Здесь почему-то не происходит перобразование
        UINT idBtn = lpttt->hdr.idForm;                                    // Соответственно на этой строчке вылетает ошибка:

Вот ошибка : error C2039: 'idForm' : is not a member of 'tagNMHDR'.

У Финогенова много таких мест. НЕ понятно каким он кмпилятором пользовался когда эту книгу писал.

Подскажите ребят почему не происходит преобразование ?

PM MAIL   Вверх
S.A.G.
Дата 21.1.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



А если так: hdr->idForm?


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
yngwie19
Дата 21.1.2009, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



LPNMHDR
ну LP это понятно длинный указатель (просто указатель)
не понятно MN че такое
ну и HDR эта структура, которая также должна расшифровываться

Добавлено через 3 минуты и 18 секунд
S.A.G., это понятно что так сработает. Т.к структура TOOLTIPTEXT содержит один из элементов структуру hdr. Но есть поля которые нужно заполнить именно через указатель на TOOLTIPTEXT

Добавлено через 4 минуты и 55 секунд
по-ходу нужно какой-то хэдер еще подрубать
PM MAIL   Вверх
mes
Дата 21.1.2009, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(yngwie19 @  21.1.2009,  21:25 Найти цитируемый пост)
У Финогенова много таких мест. НЕ понятно каким он кмпилятором пользовался когда эту книгу писал.

ну тут Финогенов и его компилятор не при чем...  smile 

Цитата(yngwie19 @  21.1.2009,  21:25 Найти цитируемый пост)
error C2039: 'idForm' 

idFrom   smile

Добавлено @ 22:38
Цитата(yngwie19 @  21.1.2009,  21:28 Найти цитируемый пост)
не понятно MN че такое
ну и HDR эта структура, которая также должна расшифровываться

думаю NotifyMessageHeaDeR smile 

Это сообщение отредактировал(а) mes - 21.1.2009, 22:39


--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 21.1.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



mes, все равно даже так. Таже самая ошибка
PM MAIL   Вверх
mes
Дата 21.1.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



а если с #include <winuser.h> ?


--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 21.1.2009, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



сделал так:
Код

LRESULT OnNotify(HWND, int, LPNMHDR lParam)
{
    if(lParam->code == TTN_NEEDTEXT)
    {
        LPTOOLTIPTEXT lpttt;
        lpttt =  (LPTOOLTIPTEXT)lParam;
        UINT idBtn = lpttt->idFrom;
    }

теперь пишет другое:
error C2039: 'idFrom' : is not a member of 'tagNMTTDISPIFNOA' что за нафиг.
Ребят подскажите в каком хэдере описан LPTOOLTIPTEXT ?
PM MAIL   Вверх
mes
Дата 21.1.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



http://msdn.microsoft.com/en-us/library/aa297203(VS.60).aspx

Добавлено @ 23:02
Цитата(yngwie19 @  21.1.2009,  21:48 Найти цитируемый пост)
 'tagNMTTDISPIFNOA' что за нафиг.

фактически то же самое что и LPTOOLTIPTEXT
Код

typedef struct tagNMTTDISPIFNOA {
    NMHDR hdr;
    LPSTR lpszText;
    char szText[80];
    HINSTANCE hinst;
    UINT uFlags;
#if (_WIN32_IE >= 0x0300)
    LPARAM lParam;
#endif
} NMTTDISPINFOA, FAR *LPNMTTDISPINFOA;



Это сообщение отредактировал(а) mes - 21.1.2009, 23:03


--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 21.1.2009, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Цитата(mes @  21.1.2009,  22:44 Найти цитируемый пост)
а если с #include <winuser.h> ? 

у меня подключен <windows.h>, он черех него подключается. Нет все равно не работает
PM MAIL   Вверх
mes
Дата 21.1.2009, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Код

typedef struct tagNMHDR {
    HWND hwndFrom;
    UINT_PTR idFrom;
    UINT code;
} NMHDR;

    UINT_PTR idFrom; следовательно :
Код

        UINT idBtn = *(lpttt->hdr.idFrom);      



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0665 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.