Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Обработка сообщения в list control от scroll


Автор: Kotjara 11.10.2006, 11:45
Нужно в list control(стиль Report) обработать сообщение от скрола.
Создаю обработку сообщения LVN_BEGINSCROLL(вернее визард сам создает).

Код

//в карте сообщений
ON_NOTIFY(LVN_BEGINSCROLL, IDC_LIST, OnLvnBeginScrollList)

//обработка сообщения
void CProj_2Dlg::OnLvnBeginScrollList(NMHDR *pNMHDR, LRESULT *pResult)
{
    // This feature requires Internet Explorer 5.5 or greater.
    // The symbol _WIN32_IE must be >= 0x0560.
    LPNMLVSCROLL pStateChanged = reinterpret_cast<LPNMLVSCROLL>(pNMHDR);
    // TODO: Add your control notification handler code here
    *pResult = 0;
}


Но при компиляции вылазят ошибки:
error C2065: 'LVN_BEGINSCROLL' : undeclared identifier
error C2065: 'LPNMLVSCROLL' : undeclared identifier

Подскажите пожалуйста решение этой проблемки.

Автор: _hunter 11.10.2006, 12:02
а чего бы в МСДН-е не гляуть где LVN_BEGINSCROLL и NMLVSCROLL объявлены?

Добавлено @ 12:08 
да и на это:
Цитата

    // This feature requires Internet Explorer 5.5 or greater.
    // The symbol _WIN32_IE must be >= 0x0560.

внимание обратить не помешало бы...

Автор: Athlon 11.10.2006, 15:24
а чем тебя не устраивают WM_HSCROLL и WM_VSCROLL?

Автор: Kotjara 11.10.2006, 16:57
_hunter:
MSDN конечно рулит и google тоже рулит, первым делом там смотрел.

Athlon:
WM_HSCROLL и WM_VSCROLL - сообщения для главного окна, а мне нужно для list control'a.

Скомпилил в VC++ 8 - все ОК, а в VC++ 7 не хочет. smile 

Автор: Athlon 11.10.2006, 17:11
я хотел сказать, что в SETFOCUS/KILLFOCUS можно устанавливать/сбрасывать какой-нибудь флажок, а в WM_HSCROLL или WM_VSCROLL при установленом флажке обрабатывать. Вариант конечно не идеальной,но вполне рабочий.

Автор: _hunter 11.10.2006, 17:43
Цитата(Kotjara @  11.10.2006,  16:57 Найти цитируемый пост)
MSDN конечно рулит

конечно рулит. только смысл влпроса не понятен. особенно учитывая:

Цитата(Kotjara @  11.10.2006,  16:57 Найти цитируемый пост)
первым делом там смотрел.

...

Автор: Kotjara 11.10.2006, 18:17
Athlon:
Не совсем понял. Если можно то поподробней.

_hunter:
Я имел ввиду, что если бы я нашел ответ в MSDN, то вопросов бы у меня не было.

Возможно необходимо произвески какие-то настройки в VC++ 7, так как в VC++ 8 компилится нормально?

Автор: _hunter 11.10.2006, 19:04
тогда повторюсь:

Цитата(_hunter @  11.10.2006,  12:02 Найти цитируемый пост)
а чего бы в МСДН-е не гляуть где LVN_BEGINSCROLL и NMLVSCROLL объявлены?Добавлено @ 12:08 да и на это:Цитата    // This feature requires Internet Explorer 5.5 or greater.    // The symbol _WIN32_IE must be >= 0x0560.внимание обратить не помешало бы...


Автор: Athlon 12.10.2006, 09:51
Я использовал такой подход когда читал значения нескольких ползунков(slider) при изменении значения которых че-то перерисовывал(я тогда учился работать с сообщениями). Там я в SETFOCUS настраивал приемник данных примерно так int *pdata = &slider1_pos, а в OnHScroll читал в приемник значение и делал перерисовку. Возможно в более сложном случае такой подход не сработает. К сожалению та прога потерялась, так что с примером не помогу smile 

Автор: Kotjara 12.10.2006, 12:13
_hunter:

Я же говорю смотрел MSDN, и где обьявлены тоже:
Код

#if (_WIN32_WINNT >= 0x501)
typedef struct tagNMLVSCROLL
{
    NMHDR   hdr;
    int     dx;
    int     dy;
} NMLVSCROLL, *LPNMLVSCROLL;

#define LVN_BEGINSCROLL          (LVN_FIRST-80)          
#define LVN_ENDSCROLL            (LVN_FIRST-81)
#endif


Если знаешь в чем конкретно копать, то подскажи, буду признателен.

Автор: _hunter 12.10.2006, 12:53
Цитата(Kotjara @  12.10.2006,  12:13 Найти цитируемый пост)
Я же говорю смотрел MSDN, и где обьявлены тоже:

и соответсвующий заголовок подключил?
и это:
Цитата(Kotjara @  12.10.2006,  12:13 Найти цитируемый пост)
#if (_WIN32_WINNT >= 0x501)

с этим:
Цитата(Kotjara @  11.10.2006,  11:45 Найти цитируемый пост)
    // This feature requires Internet Explorer 5.5 or greater.    // The symbol _WIN32_IE must be >= 0x0560.

учел?

Автор: vinter 12.10.2006, 13:50
короче поставь в stdafx.h 
Код

#define _WIN32_WINNT 0x0501    
#define _WIN32_IE 0x0560

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)