
P.S. Sper sa nu ma intelegeti gresit , recunostinta mea nu se reduce la bere !!!
Code: Select all
class CChildListCtrlEx : public CListCtrlEx
{
// Construction
public:
CChildListCtrlEx();
// Attributes
public:
friend class CTestList6View;
// Operations
public:
#ifdef _DEBUG
void AssertValid() const {}
#endif
...
...
DECLARE_MESSAGE_MAP()
};
Code: Select all
protected:
CChildListCtrlEx m_List;
Code: Select all
int CTestList6View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CListView::OnCreate(lpCreateStruct) == -1)return -1;
// TODO: Add your specialized creation code here
m_List.m_hWnd = m_hWnd;
m_List.m_pfnSuper = m_pfnSuper;
m_List.PreSubclassWindow();
return 0;
}
Code: Select all
LRESULT CListCtrlEx::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case LVM_INSERTCOLUMN:
{
TRACE("Here I create column\n");
if((GetStyle() & LVS_TYPEMASK) != LVS_REPORT)break;
LRESULT ret = CListCtrl::WindowProc(message, wParam, lParam);
if((int)ret >= 0)
{
LVCOLUMN* pCol = (LVCOLUMN*)lParam;
CHeaderCtrlEx::CItemData* pData = new CHeaderCtrlEx::CItemData(pCol->cx, TRUE, TRUE);
m_HeaderCtrl.SetItemData((int)ret, (DWORD_PTR)pData);
}
return ret;
}
case LVM_DELETECOLUMN:
{
if((GetStyle() & LVS_TYPEMASK) != LVS_REPORT)break;
CHeaderCtrlEx::CItemData* pData = (CHeaderCtrlEx::CItemData*)m_HeaderCtrl.GetItemData((int)wParam);
ASSERT(pData);
LRESULT ret = CListCtrl::WindowProc(message, wParam, lParam);
if((BOOL)ret && pData)delete pData;
return ret;
}
}
return CListCtrl::WindowProc(message, wParam, lParam);
}
Code: Select all
LRESULT CTestList6View::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
LRESULT lResult = 0;
if(! CListView::OnWndMsg(message, wParam, lParam, &lResult))
{
if(! m_List.OnWndMsg(message, wParam, lParam, &lResult))
{
lResult = DefWindowProc(message, wParam, lParam);
// lResult = m_List.WindowProc(message, wParam, lParam);
}
}
return lResult;
}
Code: Select all
int CChildListCtrlEx::InsertColumn(int nCol, LPCTSTR lpszColumnHeading,
int nFormat /*= LVCFMT_LEFT*/,
int nWidth /*= -1*/, int nSubItem /*= -1*/)
{
// call base class method for default processing
int nRet = CListCtrl::InsertColumn(nCol, lpszColumnHeading,
nFormat, nWidth, nSubItem);
// do what my muscles want
CHeaderCtrlEx::CItemData* pData = new CHeaderCtrlEx::CItemData(nWidth, TRUE, TRUE);
m_HeaderCtrl.SetItemData(nRet, (DWORD_PTR)pData);
return nRet;
}
Code: Select all
BOOL CChildListCtrlEx::DeleteColumn(int nCol)
{
// do what my muscles want
CHeaderCtrlEx::CItemData* pData =
(CHeaderCtrlEx::CItemData* )m_HeaderCtrl.GetItemData(nCol);
delete pData;
// call base class method for default processing
return CListCtrl::DeleteColumn(nCol);
}
Code: Select all
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
Code: Select all
BOOL CTestList6View::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(! CListView::PreTranslateMessage(pMsg))
return m_List.PreTranslateMessage(pMsg);
return FALSE;
}
BOOL CTestList6View::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult)
{
// TODO: Add your specialized code here and/or call the base class
if(! CListView::OnChildNotify(message, wParam, lParam, pLResult))
return m_List.OnChildNotify(message, wParam, lParam, pLResult);
return FALSE;
}
LRESULT CTestList6View::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
LRESULT lResult = 0;
if(! CListView::OnWndMsg(message, wParam, lParam, &lResult))
{
if(! m_List.OnWndMsg(message, wParam, lParam, &lResult))
{
lResult = DefWindowProc(message, wParam, lParam);
}
}
return lResult;
}
Code: Select all
void CTestList6View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
TRACE("here I use the timer\n");
CListView::OnTimer(nIDEvent);
}
Code: Select all
BOOL CTestList6View::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_TIMER)return CListView::PreTranslateMessage(pMsg);
if(! CListView::PreTranslateMessage(pMsg))
return m_List.PreTranslateMessage(pMsg);
return FALSE;
}
Pai cred ca asta face codul din PreTranslateMessage(...) dupa modelul articolului din codeguru ....Ovidiu Cucu wrote:In pimul rand, de ce incerci sa "deturnezi" toate mesajele lui "CTestList6View" ?