⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tabview.cpp

📁 这是书上的代码
💻 CPP
字号:
// TabView.cpp : implementation file
//

#include "stdafx.h"
#include "TestLib.h"
#include "TabView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

int _DEFCOLS[] = 
{
	0,2,4,5,6,3,1,8,7
};
/////////////////////////////////////////////////////////////////////////////
// CTabView

IMPLEMENT_DYNCREATE(CTabView, CFormView)

CTabView::CTabView()
	: CFormView(CTabView::IDD)
{
	//{{AFX_DATA_INIT(CTabView)
	//}}AFX_DATA_INIT
	lima.Create(IDB_ARANLIST, 16, 0, RGB(255,0,255));
	limah.Create(IDB_ARANCOL, 11, 0, RGB(255,0,255));
	ftTimes.CreatePointFont(90, "Times New Roman");
	iSelBmp = -1;
}

CTabView::~CTabView()
{
}

void CTabView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTabView)
	DDX_Control(pDX, IDC_LIST1, m_listCtrl);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTabView, CFormView)
	//{{AFX_MSG_MAP(CTabView)
	ON_WM_SIZE()
	ON_NOTIFY(LVN_GETDISPINFO, IDC_LIST1, OnGetdispinfoList1)
	ON_COMMAND(ID_CUSTOMHEADER, OnCustomheader)
	ON_COMMAND(ID_FORMATHEADER, OnFormatheader)
	ON_COMMAND(ID_TESTCAT, OnTestcat)
	ON_UPDATE_COMMAND_UI(ID_TESTCAT, OnUpdateTestcat)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
	ON_COMMAND(ID_ADDANITEM, OnAddanitem)
	ON_WM_DESTROY()
	ON_COMMAND(ID_BLENDBMP, OnBlendbmp)
	ON_UPDATE_COMMAND_UI(ID_BLENDBMP, OnUpdateBlendbmp)
	ON_COMMAND(ID_TRYBITMAP1, OnTrybitmap1)
	ON_UPDATE_COMMAND_UI(ID_TRYBITMAP1, OnUpdateTrybitmap1)
	ON_COMMAND(ID_TRYBITMAP2, OnTrybitmap2)
	ON_UPDATE_COMMAND_UI(ID_TRYBITMAP2, OnUpdateTrybitmap2)
	ON_COMMAND(ID_DRAGGABLECOL, OnDraggablecol)
	ON_UPDATE_COMMAND_UI(ID_DRAGGABLECOL, OnUpdateDraggablecol)
	ON_COMMAND(ID_GRIDH, OnGridh)
	ON_UPDATE_COMMAND_UI(ID_GRIDH, OnUpdateGridh)
	ON_COMMAND(ID_GRIDV, OnGridv)
	ON_UPDATE_COMMAND_UI(ID_GRIDV, OnUpdateGridv)
	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
	ON_COMMAND(ID_TESTDAO, OnTestdao)
	ON_UPDATE_COMMAND_UI(ID_TESTDAO, OnUpdateTestdao)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemchangedList1)
	ON_COMMAND(ID_AUTOPREVIEW, OnAutopreview)
	ON_UPDATE_COMMAND_UI(ID_AUTOPREVIEW, OnUpdateAutopreview)
	ON_MESSAGE(WM_LISTEX_NOTIFY, OnListExNotify)
	//}}AFX_MSG_MAP
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
	
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTabView diagnostics



BOOL CTabView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	
	return CFormView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CSuperGrid1View printing

BOOL CTabView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CTabView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
	m_listCtrl.SetPrintFlag(ptUseColor|ptUseFonts|ptListName|ptPageNumbers|ptPageDate);
	m_listCtrl.SetPrintName("数据名称");
	m_listCtrl.SetMargins(15,10,10,10);
	m_listCtrl.OnBeginPrinting(pDC, pInfo);
}

void CTabView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
	m_listCtrl.OnEndPrinting(pDC, pInfo);
}

void CTabView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
	m_listCtrl.OnPrint(pDC, pInfo);
}

/////////////////////////////////////////////////////////////////////////////
// CSuperGrid1View diagnostics




#ifdef _DEBUG
void CTabView::AssertValid() const
{
	CFormView::AssertValid();
}

void CTabView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CTestLibDoc* CTabView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestLibDoc)));
	return (CTestLibDoc*)m_pDocument;
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTabView message handlers

void CTabView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	
	CGfxColumnManager * pManager = m_listCtrl.CreateColumnManager();
	
	pManager->DefineColumn(0, "", NULL, LVCFMT_LEFT, 0, fhNoSortArrow|fhNoResizeColumn);
	pManager->DefineColumn(1, "列0");
	pManager->DefineColumn(2, "列1", NULL, LVCFMT_CENTER, 120, fhEdit|fhNumeric|fhSortAble);
	pManager->DefineColumn(3, "列2", NULL, LVCFMT_LEFT, 220, fhEdit|fhSortAble);
	pManager->DefineColumn(7, "列3", NULL, LVCFMT_LEFT, 120, fhEdit|fhSortAble);
	pManager->DefineColumn(4, NULL, NULL, LVCFMT_LEFT, 20, fhImage|fhNoSortArrow|fhNoResizeColumn|fhSortAble|fhColumnHasImage, 0, "Image 1");
	pManager->DefineColumn(5, NULL, NULL, LVCFMT_LEFT, 20, fhImage|fhNoSortArrow|fhNoResizeColumn|fhSortAble|fhColumnHasImage, 1, "Image 2");
	pManager->DefineColumn(6, NULL, NULL, LVCFMT_LEFT, 20, fhImage|fhNoSortArrow|fhNoResizeColumn|fhSortAble|fhColumnHasImage, 2, "Image 3");
	pManager->DefineColumn(8, "组合框", NULL, LVCFMT_LEFT, 120, fhComboBoxEx|fhSortAble);
	
	pManager->DefineDefaultColumns(sizeof(_DEFCOLS)/sizeof(int), _DEFCOLS);
	
	pManager->ReadFromProfile("TheMainList");
	
	m_listCtrl.SetItemImageList(&lima);
	m_listCtrl.SetHeaderImageList(&limah);
	
	m_listCtrl.OnInit();
	m_listCtrl.ModifyFlag(0,fHighRowSelect|fVertGrid|fHorizGrid|fAutoSort,0);
	SetWindowPos(0,0,0,0,0,SWP_FRAMECHANGED);
	
	m_listCtrl.SetupColumnData();
	
	m_listCtrl.SetItemCount(200);
	
	for (int t = 0; t < 200; t++)
		m_listCtrl.InsertItemEx(t,t);
	
	m_listCtrl.SetItemHeight(17);
	
	m_listCtrl.SetCategoryCallback((void (CWnd::*)(CGfxCategoryManager * , long &))CategoryCallBack);
	//	m_listCtrl.SetGetTextCallback((void (CWnd::*)(int , int, long, CString &)) GetTextCallback);
	m_listCtrl.SetExInfoCallback((long (CWnd::*)(LXHDREX *))GetExInfoCallback);	
}

void CTabView::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);
	
	if (m_listCtrl.GetSafeHwnd()) m_listCtrl.SetWindowPos(0,2,2,cx-4,cy-4,SWP_NOZORDER);
	SetScrollSizes(MM_TEXT, CSize(cx,cy));
	
}

void CTabView::OnGetdispinfoList1(NMHDR* pNMHDR, LRESULT* pResult) 
{

	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
	*pResult = 0;

	long index = pDispInfo->item.iItem;
	long subItem = pDispInfo->item.iSubItem;
	long objCode = pDispInfo->item.lParam;

	if(pDispInfo->item.mask & LVIF_TEXT)
	{
		CString cs;
		GetTextCallback(index, subItem, objCode, cs);

		lstrcpyn(pDispInfo->item.pszText, cs, pDispInfo->item.cchTextMax);
		*pResult = 1;

	}
	
	if(pDispInfo->item.mask & LVIF_IMAGE) pDispInfo->item.iImage = 0;//set image to first in list	
}

void CTabView::CategoryCallBack(CGfxCategoryManager * pCatMan, long & lData)
{

	long value = lData;

	int iCat = pCatMan->FindCategory(value);
	if (iCat < 0)
	{
		CString cs;
		long val1 = value / 20;
		val1 *= 20;
		long val2 = val1 + 20;

		cs.Format("%d - %d", val1, val2);
		iCat = pCatMan->AddCategory(cs, val1, val2);
	}
	if (iCat >= 0)
	{
		pCatMan->AddItemToCategory(iCat, value);
	}
	if (lData > 310)
	{
		pCatMan->AddItemToCategory(0, value);
	}
}	

void CTabView::OnCustomheader() 
{
	m_listCtrl.OnGfxCustomizehead();
}

void CTabView::OnFormatheader() 
{
	m_listCtrl.OnGfxFormatheader();
}

void CTabView::OnListCmdUpdate(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(true);
}

void CTabView::OnTestcat() 
{
	if (m_listCtrl.GetCategoryManager()) m_listCtrl.EnableCategoryView(false);
	else m_listCtrl.EnableCategoryView(true);
	
}

void CTabView::OnUpdateTestcat(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_listCtrl.GetCategoryManager() != NULL);
}

void CTabView::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;
	int i = m_listCtrl.GetNextItem(-1, LVNI_SELECTED);
	if (i < 0) return;
	int idx = m_listCtrl.GetItemData(i);
	CString cs;
	cs.Format("Click on %d", idx);
	AfxMessageBox(cs);	
}

long CTabView::GetExInfoCallback(LXHDREX * pLx)
{
	ASSERT(pLx);

	switch(pLx->iNotifyCode)
	{
	case NTEX_ITEMINFO:
		if (pLx->dwItemData < 25 || (pLx->dwItemData > 200 && pLx->dwItemData % 2 == 0))
			pLx->dwFlag |= LXHDREX::exBold;

		if (pLx->iSubItem == 7) pLx->dwFlag |= LXHDREX::exUnderline;
		if (pLx->iSubItem == 2)
		{
			pLx->hfText = (HFONT) ftTimes.GetSafeHandle();
			pLx->dwFlag |= LXHDREX::exHFont;
		}
		if (pLx->iSubItem == 3) 
		{
			pLx->dwFlag |= LXHDREX::exTextColor;
			pLx->crText = RGB(255,0,0);
		}
		if (pLx->iSubItem == 8) 
		{
			pLx->dwFlag |= LXHDREX::exTextColor;
			pLx->crText = RGB(255,0,128);
		}
		return 1;
		break;
	case NTEX_COMBOREQUEST:
		{
			pLx->pComboArray->Add(CString(""));
			pLx->pComboArray->Add(pLx->csText);
			pLx->pComboArray->Add(CString("Provincia"));
			pLx->pComboArray->Add(CString("Anas"));
			pLx->pComboArray->Add(CString("Comune"));
			return 1;
		}
		break;
	case NTEX_SETTEXT:
		return 1;
	case NTEX_AUTOPREVIEW:
		{
			if (pLx->dwItemData % 2 == 0) return 0;

			LXHDREX_DIV * pLxEx = (LXHDREX_DIV *) pLx;

			COLORREF ocr = pLxEx->pDC->SetTextColor(RGB(0,0,255));
			CString cs;
			cs.Format("测试项");
			pLxEx->pDC->DrawText(cs, pLxEx->rcItem, DT_END_ELLIPSIS|DT_WORDBREAK);
			pLxEx->pDC->SetTextColor(ocr);
			return 0;
		}
	};

	return 0L;
}

LRESULT CTabView::OnListExNotify(WPARAM wParam, LPARAM lParam)
{
	TRACE0("OnListExNotify\n");
	LXHDREX * pLx = (LXHDREX *) lParam;
	ASSERT(pLx);


	switch(pLx->iNotifyCode)
	{
	case NTEX_ITEMINFO:
		if (pLx->dwItemData < 25 || (pLx->dwItemData > 200 && pLx->dwItemData % 2 == 0))
			pLx->dwFlag |= LXHDREX::exBold;

		if (pLx->iSubItem == 7) pLx->dwFlag |= LXHDREX::exUnderline;
		if (pLx->iSubItem == 3) 
		{
			pLx->dwFlag |= LXHDREX::exTextColor;
			pLx->crText = RGB(255,0,0);
		}
		if (pLx->iSubItem == 2)
		{
			pLx->hfText = (HFONT) ftTimes.GetSafeHandle();
			pLx->dwFlag |= LXHDREX::exHFont;
		}
		return 1;
		break;
	case NTEX_COMBOREQUEST:
		{
			pLx->pComboArray->Add(CString(""));
			pLx->pComboArray->Add(pLx->csText);
			pLx->pComboArray->Add(CString("Provincia"));
			pLx->pComboArray->Add(CString("Anas"));
			pLx->pComboArray->Add(CString("Comune"));
			return 1;
		}
		break;
	case NTEX_SETTEXT:
		m_listCtrl.SetItemText(pLx->iItem, pLx->iSubItem, pLx->csText);
		return 1;
	};

	return 0L;
}

void CTabView::OnAddanitem() 
{
	static int inewitem = 317;
	m_listCtrl.InsertItemEx(m_listCtrl.GetItemCount(), inewitem++);
}

void CTabView::OnDestroy() 
{
	if (m_listCtrl.GetCategoryManager()) m_listCtrl.EnableCategoryView(false);
	CGfxColumnManager * pManager = m_listCtrl.GetColumnManager();
	pManager->RetrieveColumnData(&m_listCtrl);
	pManager->WriteToProfile("TheMainList");

	CFormView::OnDestroy();
}

void CTabView::OnBlendbmp() 
{
	m_listCtrl.SetBlendBitmap(!m_listCtrl.bBlendBitmap);
	m_listCtrl.Invalidate();
}

void CTabView::OnUpdateBlendbmp(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_listCtrl.bBlendBitmap);
	pCmdUI->Enable(iSelBmp >= 0);

}

void CTabView::OnTrybitmap1() 
{
	if (iSelBmp == 0)
	{
		m_listCtrl.SetBkImage(-1);
		iSelBmp = -1;
	}
	else 
	{
		m_listCtrl.SetBkImage(IDB_BITMAP1);
		iSelBmp = 0;
	}
	m_listCtrl.Invalidate();
}

void CTabView::OnUpdateTrybitmap1(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(iSelBmp == 0);
}

void CTabView::OnTrybitmap2() 
{
	if (iSelBmp == 1)
	{
		m_listCtrl.SetBkImage(-1);
		iSelBmp = -1;
	}
	else 
	{
		m_listCtrl.SetBkImage(IDB_BITMAP2);
		iSelBmp = 1;
	}
	m_listCtrl.Invalidate();
}

void CTabView::OnUpdateTrybitmap2(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(iSelBmp == 1);
}

void CTabView::OnDraggablecol() 
{
	m_listCtrl.EnableColumnDrag(!m_listCtrl.IsColumnDragEnabled());
}

void CTabView::OnUpdateDraggablecol(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_listCtrl.IsColumnDragEnabled());	
}

void CTabView::OnGridh() 
{
	if (m_listCtrl.GetFlag() & fHorizGrid) m_listCtrl.ModifyFlag(fHorizGrid, 0, 0);
	else m_listCtrl.ModifyFlag(0, fHorizGrid, 0);

	Invalidate();
	
}

void CTabView::OnUpdateGridh(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_listCtrl.GetFlag() & fHorizGrid ? 1 : 0);
}

void CTabView::OnGridv() 
{
	if (m_listCtrl.GetFlag() & fVertGrid) m_listCtrl.ModifyFlag(fVertGrid, 0, 0);
	else m_listCtrl.ModifyFlag(0, fVertGrid, 0);
	Invalidate();
}

void CTabView::OnUpdateGridv(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_listCtrl.GetFlag() & fVertGrid ? 1 : 0);
	
}

void CTabView::OnEditCopy() 
{
	m_listCtrl.DoCopyInClipboard(m_listCtrl.GetSelectedCount() > 0 ? true : false);
}

void CTabView::OnTestdao() 
{
	// see the other demo at codeguru for dao sample, here i putted instead a dialog demo
//	CTestDialog dlg;
//	dlg.DoModal();
}

void CTabView::OnUpdateTestdao(CCmdUI* pCmdUI) 
{

}


void CTabView::GetTextCallback(int iIndex, int iSubItem, long lCode, CString &cs)
{
	cs = "";
	int rc = m_listCtrl.GetColumnIndex(iSubItem);
	if (rc == 4) cs = "1";
	else if (rc == 5) cs = "2";
	else if (rc == 6) cs = "3";
	else if (rc == 2) cs.Format("%d", lCode);
	else if (rc == 3) cs.Format("第%d项", lCode);
	else cs.Format("%d, %d", lCode, rc);
}



void CTabView::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	
	*pResult = 0;
}

void CTabView::OnAutopreview() 
{
	int oah = m_listCtrl.GetAutoPreviewHeight();
	if (oah <= 0) m_listCtrl.SetAutoPreviewHeight(30);
	else m_listCtrl.SetAutoPreviewHeight(0);
}

void CTabView::OnUpdateAutopreview(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_listCtrl.GetAutoPreviewHeight());
	pCmdUI->Enable(m_listCtrl.GetCategoryManager() == NULL);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -