CListView и его CListCtrl
От: azesh Россия  
Дата: 22.03.04 13:20
Оценка:
Привет всем...
может кто занимался такой проблемой...

мне у CListView нужно заменить CListCtrl на свой...
подскажите как это сделать?

я пробовал SubclassWindow, но не получается, потому как не проходит Attach в функции CListView....
Re: CListView и его CListCtrl
От: Михаил А. Русаков https://www.wincatalog.com
Дата: 22.03.04 13:36
Оценка:
Здравствуйте, azesh, Вы писали:

A>мне у CListView нужно заменить CListCtrl на свой...

A>подскажите как это сделать?
Я делал так:

//MyListView.h
class CMyListCtrl : public CListCtrl
{
    //....
}

class CMyListView : public CListView
{
//...
public:
    CMyListCtrl & GetListCtrl(){return m_ctrlList;}
protected:
    virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    virtual BOOL OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult);
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnDestroy();
protected:
    CMyListCtrl m_ctrlList;

}

//MyListView.cpp
LRESULT CMyListView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
    LRESULT lResult = 0;
    if (!OnWndMsg(message, wParam, lParam, &lResult))
        if( !m_ctrlList.OnWndMsg(message, wParam, lParam, &lResult))
            lResult = DefWindowProc(message, wParam, lParam);
    return lResult;
}
BOOL CMyListView::PreTranslateMessage(MSG* pMsg) 
{
    if( ! CListView::PreTranslateMessage(pMsg) )
        return m_ctrlList.PreTranslateMessage(pMsg);

    return CListView::PreTranslateMessage(pMsg);
}
int CMyListView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
    if (CListView::OnCreate(lpCreateStruct) == -1)
        return -1;
    
    m_ctrlList.m_hWnd = m_hWnd;
    m_ctrlList.m_pfnSuper = m_pfnSuper;
    m_ctrlList.PreSubclassWindow();
    
    return 0;
}
BOOL CMyListView::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult) 
{
    if( !CListView::OnChildNotify(message, wParam, lParam, pLResult) )
        return m_ctrlList.OnChildNotify(message, wParam, lParam, pLResult) ;
    return FALSE;
}
void CMyListView::OnDestroy() 
{
    m_ctrlList.OnDestroy();
    m_ctrlList.m_hWnd = NULL;
    m_ctrlList.m_pfnSuper = NULL;

    CListView::OnDestroy();
}
WinCatalog — Disk Catalog Software for Windows
Re[2]: CListView и его CListCtrl
От: Михаил А. Русаков https://www.wincatalog.com
Дата: 22.03.04 13:40
Оценка:
МАР>
МАР>BOOL CMyListView::PreTranslateMessage(MSG* pMsg) 
МАР>{
МАР>    if( ! CListView::PreTranslateMessage(pMsg) )
МАР>        return m_ctrlList.PreTranslateMessage(pMsg);

МАР>    return CListView::PreTranslateMessage(pMsg);
МАР>}
МАР>

Вот и ошибку нашел...

BOOL CMyListView::PreTranslateMessage(MSG* pMsg) 
{
    BOOL bRet = CListView::PreTranslateMessage(pMsg);
    if(!bRet)
        return m_ctrlList.PreTranslateMessage(pMsg);
    return bRet;
}
WinCatalog — Disk Catalog Software for Windows
Re[3]: CListView и его CListCtrl
От: azesh Россия  
Дата: 22.03.04 14:27
Оценка:
Здравствуйте, Михаил А. Русаков, Вы писали:

МАР>>
МАР>>BOOL CMyListView::PreTranslateMessage(MSG* pMsg) 
МАР>>{
МАР>>    if( ! CListView::PreTranslateMessage(pMsg) )
МАР>>        return m_ctrlList.PreTranslateMessage(pMsg);

МАР>>    return CListView::PreTranslateMessage(pMsg);
МАР>>}
МАР>>

МАР>Вот и ошибку нашел...

МАР>
МАР>BOOL CMyListView::PreTranslateMessage(MSG* pMsg) 
МАР>{
МАР>    BOOL bRet = CListView::PreTranslateMessage(pMsg);
МАР>    if(!bRet)
МАР>        return m_ctrlList.PreTranslateMessage(pMsg);
МАР>    return bRet;
МАР>}
МАР>



Странно, но у меня это не работает...
падает все на вызове m_ctrlList.OnChildNotify
когда прилетает сообщение WM_NOTIFY (к сожалению не могу сказать какой, уже не помню )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.