Привет всем...
может кто занимался такой проблемой...
мне у CListView нужно заменить CListCtrl на свой...
подскажите как это сделать?
я пробовал SubclassWindow, но не получается, потому как не проходит Attach в функции CListView....
Здравствуйте, 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();
}
МАР>МАР>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;
}
Здравствуйте, Михаил А. Русаков, Вы писали:
МАР>>МАР>>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 (к сожалению не могу сказать какой, уже не помню

)