WTL - Обработка сообщений контрола
От: SpeCT Россия  
Дата: 09.03.04 17:49
Оценка:
Прошу помощи у знающих людей.

У меня есть окно, простое такое окошко. На нём есть ListView (на самом деле их там не известно сколько). Как мне обработать сообщение (мне нужно WM_VSCROLL, но это не играет роли), приходящее этому ListView? Сейчас код имеет примерно такой вид:

class CVariableList : public CListViewCtrl
{
//<...>
}

class CMainWnd : public CWindowImpl<CMainWnd, CWindow, CFrameWinTraits>
{
//<...>
    std::vector<CVariableList> m_listViews;    // вот этим листам приходит сообщение, как мне его обработать?
//<...>
}
Re: WTL - Обработка сообщений контрола
От: Виталий Россия  
Дата: 10.03.04 05:37
Оценка:
Здравствуйте, SpeCT, Вы писали:

SCT>У меня есть окно, простое такое окошко. На нём есть ListView (на самом деле их там не известно сколько). Как мне обработать сообщение (мне нужно WM_VSCROLL, но это не играет роли), приходящее этому ListView? Сейчас код имеет примерно такой вид:


SCT>
[skip]
SCT>

Для каждого ListView при создании можно установаить его собственный ID

Create(HWND hWndParent, _U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0, DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)

Потом при обработке сообщения просто этот ID получать — ListView.GetWindowLong(GWL_ID) и будет Счастье
Re[2]: WTL - Обработка сообщений контрола
От: SpeCT Россия  
Дата: 11.03.04 10:02
Оценка:
Здравствуйте, Виталий, Вы писали:

В>Здравствуйте, SpeCT, Вы писали:


SCT>>У меня есть окно, простое такое окошко. На нём есть ListView (на самом деле их там не известно сколько). Как мне обработать сообщение (мне нужно WM_VSCROLL, но это не играет роли), приходящее этому ListView? Сейчас код имеет примерно такой вид:


В>Для каждого ListView при создании можно установаить его собственный ID

В>

В>Create(HWND hWndParent, _U_RECT rect = NULL, LPCTSTR szWindowName = NULL,
В> DWORD dwStyle = 0, DWORD dwExStyle = 0,
В> _U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL)

В>Потом при обработке сообщения просто этот ID получать — ListView.GetWindowLong(GWL_ID) и будет Счастье :)

Я так и не понял что даёт мне этот ID? Пока что сообщения у меня может принимать только главное окно. Как обработать сообщения ListView я не понял. Пробовал так:
class CVariableList : public CWindowImpl<CVariableList, CListViewCtrl>
{
private:
    BEGIN_MSG_MAP(CVariableList)
        MESSAGE_HANDLER (WM_VSCROLL, OnScroll)
    END_MSG_MAP()
}


Но приложение вылетает сразу же.
ЗЫ: Главное окно выглядит так:
class CMainWnd : public CWindowImpl<CMainWnd, CWindow, CFrameWinTraits>
{
private:
    std::vector<CVariableList> m_listViews;    

private:    
    BEGIN_MSG_MAP(CMainWnd)
        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
        MESSAGE_HANDLER (WM_SIZE, OnSize)
        
        MESSAGE_HANDLER (WM_DRAWITEM, OnDrawItem)

        REFLECT_NOTIFICATIONS()
    END_MSG_MAP()
}


Как мне ЭТО изменить так, чтобы заработало?
Re[3]: WTL - Обработка сообщений контрола
От: SpeCT Россия  
Дата: 11.03.04 10:22
Оценка:
SCT>Но приложение вылетает сразу же.
SCT>ЗЫ: Главное окно выглядит так:
SCT>
SCT><skip>
SCT>

SCT>Как мне ЭТО изменить так, чтобы заработало?

ВОПРОС Снят. :super: Я дурень! Вместо
private:
    std::vector<CVariableList> m_listViews;


Надо заводить
private:
    std::vector<CVariableList*> m_listViews;


Во дурак... Ж)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.