Re: deriving from CListCtrl
Maybe it would help if i pasted it.
//This is the beginning of the cpp for the child dialog in my dialog App
// reportdialog.cpp : implementation file
//
#include "stdafx.h"
#include "testapp.h"
#include "reportdialog.h"
#include "cstringt.h"
#include "afxwin.h"
#include <stdlib.h>
#include <stdio.h>
#include "SortListCtrl.h"
// reportdialog dialog
IMPLEMENT_DYNAMIC(reportdialog, CDialog)
reportdialog::reportdialog(CWnd* pParent /*=NULL*/)
: CDialog(reportdialog::IDD, pParent)
{
}
reportdialog::~reportdialog()
{
}
void reportdialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_cList2Ctrl);
}
BEGIN_MESSAGE_MAP(reportdialog, CDialog)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &reportdialog::OnLvnItemchangedList1)
ON_BN_CLICKED(IDOK, &reportdialog::OnBnClickedOk)
END_MESSAGE_MAP()
// reportdialog message handlers
BOOL reportdialog::OnInitDialog() // Handler for WM_INITDIALOG
{
CDialog::OnInitDialog();
// m_ctlList.SubclassDlgItem(IDC_LIST1, this->GetParent());
// AfxMessageBox("OnInit");
return true;
}
void reportdialog::PreSubclassWindow(){
/*CHeaderCtrl* pHeader = GetHeaderCtrl();
if (pHeader==NULL) { return; }
VERIFY(m_HeaderCtrl.SubclassWindow(pHeader->m_hWnd));
CListCtrl::PreSubclassWindow();*/
}
void reportdialog::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
}
void reportdialog::Init(){
m_bInit=false;
}
void reportdialog::newfunc(){
if (!m_bInit){
m_bInit = true;
DWORD dwStyles = m_cList2Ctrl.GetStyle();
//CClientDC dc(this);
CRect rect;
m_cList2Ctrl.GetWindowRect(&rect);
ScreenToClient(&rect);
// m_cList2Ctrl.DestroyWindow();
// m_cList2Ctrl.Create(dwStyles, rect, this, IDC_LIST1);
//m_cList2Ctrl.SetExtendedStyle(m_cList2Ctrl.GetExtendedStyle()|LVS_EX_GRIDLINES);
m_cList2Ctrl.SetExtendedStyle(LVS_EX_GRIDLINES);
m_cList2Ctrl.DeleteAllItems();
// Insert some columns
//CRect rect;
m_cList2Ctrl.GetClientRect(&rect);
int nColInterval = rect.Width()/16;
m_cList2Ctrl.InsertColumn(0, _T("Reff #"), LVCFMT_LEFT, nColInterval);
m_cList2Ctrl.InsertColumn(1, _T("Logon ID"), LVCFMT_LEFT,
nColInterval/**3*/);
m_cList2Ctrl.InsertColumn(2, _T("Name"), LVCFMT_LEFT,
/*rect.Width()-4**/nColInterval);
m_cList2Ctrl.InsertColumn(3, _T("Account Type"), LVCFMT_LEFT,
nColInterval/**3*/);
m_cList2Ctrl.InsertColumn(4, _T("Minutes"), LVCFMT_LEFT, nColInterval);
m_cList2Ctrl.InsertColumn(5, _T("Date of\nMembership"), LVCFMT_LEFT,
nColInterval);
m_cList2Ctrl.InsertColumn(6, _T("Activation Date"), LVCFMT_LEFT,
/*rect.Width()-4**/nColInterval);
m_cList2Ctrl.InsertColumn(7, _T("Expiration Date"), LVCFMT_LEFT,
/*rect.Width()-4**/nColInterval);
m_cList2Ctrl.InsertColumn(8, _T("Last Use"), LVCFMT_LEFT,
/*rect.Width()-4**/nColInterval);
m_cList2Ctrl.InsertColumn(9, _T("Monthly Usage"), LVCFMT_LEFT,
/*rect.Width()-4**/nColInterval);
m_cList2Ctrl.InsertColumn(10, _T("Minute\nReset date"), LVCFMT_LEFT,
/*rect.Width()-4**/nColInterval);
m_cList2Ctrl.InsertColumn(11, _T("Address"), LVCFMT_LEFT,
/*rect.Width()-4**/nColInterval);
m_cList2Ctrl.InsertColumn(12, _T("Monthly Usage"), LVCFMT_LEFT,
/*rect.Width()-4**/nColInterval);
m_cList2Ctrl.InsertColumn(13, _T("Avg Pressure\nSetting"), LVCFMT_LEFT,
nColInterval/**3*/);
m_cList2Ctrl.InsertColumn(14, _T("Avg Length\nof Time"), LVCFMT_LEFT,
nColInterval/**3*/);
m_cList2Ctrl.InsertColumn(15, _T("Avg Limiting\nSettings"), LVCFMT_LEFT,
nColInterval/**3*/);
m_NewHeaderFont.CreatePointFont(190,_T("Arial"));
//CListCtrl& ListCtrl = GetListCtrl();
CHeaderCtrl* pHeader = NULL;
pHeader=m_cList2Ctrl.GetHeaderCtrl();
//pHeader=ListCtrl.GetHeaderCtrl();
if(pHeader==NULL)
return;
m_HeaderCtrl.SubclassWindow(pHeader->m_hWnd);
//m_cList2Ctrl.
//m_ctlList.SubclassWindow(m_cList2Ctrl.m_hWnd);
//A BIGGER FONT MAKES THE CONTROL BIGGER
m_HeaderCtrl.SetFont(&m_NewHeaderFont);
HDITEM hdItem;
m_cList2Ctrl.InsertItem(0,"DELETE!");
hdItem.mask = HDI_FORMAT;
int i;
for(i=0; i < m_HeaderCtrl.GetItemCount(); i++)
{
m_HeaderCtrl.GetItem(i,&hdItem);
hdItem.fmt|= HDF_OWNERDRAW;
m_HeaderCtrl.SetItem(i,&hdItem);
}
m_cList2Ctrl.DeleteItem(0);
// m_ctlList.
m_cList2Ctrl.AddItem( _T("Mark Jackson"), _T("09/08/1974"), _T("100"),
_T("o"), _T("m"), _T("f"), _T("g"), _T("w"), _T("t"), _T("f"), _T("b"),
_T("b"), _T("q"), _T("f"), _T("t"), _T("f"), _T("l") );
//(void)m_ctlList.
m_cList2Ctrl.AddItem( _T("Trevor McSplatt"), _T("03/12/1970"), _T("25") );
//(void)m_ctlList.
m_cList2Ctrl.AddItem( _T("Sidney Finkelstein"), _T("01/01/1960"), _T("40")
);
}
}
void reportdialog::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
OnOK();
}
//This is the end of the cpp for the child dialog in my dialog App
//This is the Beginnging of the Header file for the child dialog in my
dialog App
#pragma once
#include "afxcmn.h"
#include "afxwin.h"
#include "HeaderCtrlExt.h"
#include "SortListCtrl.h"
#include "SortHeaderCtrl.h"
// reportdialog dialog
class reportdialog : public CDialog
{
DECLARE_DYNAMIC(reportdialog)
public:
reportdialog(CWnd* pParent = NULL); // standard constructor
virtual ~reportdialog();
CFont m_NewHeaderFont;
CHeaderCtrlEx m_HeaderCtrl;
// CSortListCtrl m_ctlList;
// Dialog Data
enum { IDD = IDD_DIALOG1 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
public:
virtual void PreSubclassWindow();
afx_msg void OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult);
void newfunc();
// CListCtrl m_cList2Ctrl;
// CSortListCtrl m_ctlList;
CSortListCtrl m_cList2Ctrl;
afx_msg void OnBnClickedOk();
void Init();
bool m_bInit;
};
//This is the end of the Header file for the child dialog in my dialog App
//This is the Beginning of the cpp file for the Header column function. All
it does is overrides Draw Item
// HeaderCtrlEx1.cpp : implementation file
//
#include "stdafx.h"
//#include "HeaderCtrlEx.h"
#include "HeaderCtrlExt.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CHeaderCtrlEx
CHeaderCtrlEx::CHeaderCtrlEx()
{
}
CHeaderCtrlEx::~CHeaderCtrlEx()
{
}
BEGIN_MESSAGE_MAP(CHeaderCtrlEx, CHeaderCtrl)
//{{AFX_MSG_MAP(CHeaderCtrlEx)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHeaderCtrlEx message handlers
void CHeaderCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_HEADER);
HDITEM hdi;
TCHAR lpBuffer[256];
//char *lpBuffer;
hdi.mask = HDI_TEXT;
hdi.pszText = lpBuffer;
hdi.cchTextMax = 256;
GetItem(lpDrawItemStruct->itemID, &hdi);
CDC* pDC;
pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
//THIS FONT IS ONLY FOR DRAWING AS LONG AS WE DON'T DO A SetFont(...)
pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));
// Draw the button frame.
::DrawFrameControl(lpDrawItemStruct->hDC,
&lpDrawItemStruct->rcItem, DFC_BUTTON, DFCS_BUTTONPUSH);
UINT uFormat = DT_CENTER;
//DRAW THE TEXT
::DrawText(lpDrawItemStruct->hDC, lpBuffer, strlen(lpBuffer),
&lpDrawItemStruct->rcItem, uFormat);
pDC->SelectStockObject(SYSTEM_FONT);
}
//This is the end of the cpp file for the Header column function.
//This is the beginning of the header file for the Header column function.
For cpp above ^^
#if
!defined(AFX_HEADERCTRLEX1_H__8839C76A_39CB_4CD1_A9B3_D77B3E64E8C8__INCLUDED_)
#define AFX_HEADERCTRLEX1_H__8839C76A_39CB_4CD1_A9B3_D77B3E64E8C8__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// HeaderCtrlEx1.h : header file
//
#include "SortListCtrl.h"
/////////////////////////////////////////////////////////////////////////////
// CHeaderCtrlEx window
class CHeaderCtrlEx : public CHeaderCtrl
{
// Construction
public:
CHeaderCtrlEx();
// Attributes
public:
// Operations
public:
// int AddItem( LPCTSTR pszText, ... );
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CHeaderCtrlEx)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CHeaderCtrlEx();
// Generated message map functions
protected:
//{{AFX_MSG(CHeaderCtrlEx)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately
before the previous line.
#endif //
!defined(AFX_HEADERCTRLEX1_H__8839C76A_39CB_4CD1_A9B3_D77B3E64E8C8__INCLUDED_)
//This is the end of the header file for the Header column function. For cpp
above ^^