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

📄 listctrlex.cpp

📁 Pocket PC2003上的火车时刻表
💻 CPP
字号:
// ListCtrlEx.cpp : implementation file
//

#include "stdafx.h"
#include "Crtt_CE.h"
#include "ListCtrlEx.h"
#include "InfoDlg.h"
#include "dbfengine.h"


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

extern	CWordArray g_wStationsArray;
extern	int m_nIsListAll;
extern 	int m_nStepNum;
extern int g_nTotalRecordNum;
extern int g_nTotalFieldNum;
extern PBYTE g_pFieldBuf;
extern PBYTE g_pMemoFieldBuf;
extern CDbFile g_dbf;

//#define _AFXCTL_INLINE inline
/////////////////////////////////////////////////////////////////////////////
// CListCtrlEx

CListCtrlEx::CListCtrlEx()
{
p_dlg=new CInfoDlg(this);
}

CListCtrlEx::~CListCtrlEx()
{
	delete p_dlg;
}


BEGIN_MESSAGE_MAP(CListCtrlEx, CListCtrl)
	//{{AFX_MSG_MAP(CListCtrlEx)
	ON_WM_VSCROLL()
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	ON_NOTIFY_REFLECT(NM_RDBLCLK, OnRdblclk)
	ON_NOTIFY_REFLECT(HDN_ITEMDBLCLICK, OnItemdblclick)
	ON_WM_LBUTTONDBLCLK()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CListCtrlEx message handlers
BOOL CListCtrlEx::AddColumn(LPCTSTR strItem,int nItem,int nSubItem,int nMask,int nFmt)
{
	LV_COLUMN lvc;
	lvc.mask = nMask;
	lvc.fmt = nFmt;
	lvc.pszText = (LPTSTR) strItem;
	lvc.cx = GetStringWidth(lvc.pszText) + 15;
	if(nMask & LVCF_SUBITEM){
		if(nSubItem != -1)
			lvc.iSubItem = nSubItem;
		else
			lvc.iSubItem = nItem;
	}
	return InsertColumn(nItem,&lvc);
}

BOOL CListCtrlEx::AddItem(int nItem,int nSubItem,LPCTSTR strItem,int nImageIndex)
{
	LV_ITEM lvItem;
	lvItem.mask = LVIF_TEXT;
	lvItem.iItem = nItem;
	lvItem.iSubItem = nSubItem;
	lvItem.pszText = (LPTSTR) strItem;
	if(nImageIndex != -1){
		lvItem.mask |= LVIF_IMAGE;
		lvItem.iImage |= LVIF_IMAGE;
	}
	if(nSubItem == 0)
		return InsertItem(&lvItem);
	return SetItem(&lvItem);
}


void CListCtrlEx::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
/*	int n1=GetTopIndex( ) ;
	int	n2=GetCountPerPage( );
	if(n1+n2>49)
		{
		//GetDlgItem(IDC_BUTTON_Prev)->EnableWindow(TRUE);
		if(m_nStepNum>(g_nTotalFieldNum/50-1))
			{
			//GetDlgItem(IDC_BUTTON_Next)->EnableWindow(FALSE);
			return;
			}
		DeleteAllItems();
		m_nStepNum++;
		int i;
		int j;
		int start=50*m_nStepNum;
		int end=min(start+50,g_nTotalFieldNum);
		TCHAR cc1[10],cc2[10];
		wsprintf(cc1,_T("%d"),start+1);
		wsprintf(cc2,_T("%d"),end);
		//m_sCurrNum=cc1;
		//m_sCurrNum+=_T("~");
		//m_sCurrNum+=cc2;
		for(i=start;i<end;i++)
			{	
			for(j=0;j<8;j++)
				{
				if(m_nIsListAll)
					AddItem(i-start,j,g_pFieldArray0[i][j]);
				else
					AddItem(i-start,j,m_pFieldArray[i][j]);
				}
			}
		if(m_nStepNum>(g_nTotalFieldNum/50-1))
			{
			//GetDlgItem(IDC_BUTTON_Next)->EnableWindow(FALSE);
			}
		//UpdateData(FALSE);
		}
*/
//	TCHAR t[20];
//	wsprintf(t,_T("%d"),n);
//	AfxMessageBox(t);
//	wsprintf(t,_T("%d"),n);
//	AfxMessageBox(t);
	
}

BOOL CListCtrlEx::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
//	cs.style &= ~WS_HSCROLL;
//cs.style &= ~(WS_HSCROLL|ES_AUTOHSCROLL);
	
	return CListCtrl::PreCreateWindow(cs);
}

BOOL CListCtrlEx::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CListCtrl::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

BOOL CListCtrlEx::OnCommand(WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CListCtrl::OnCommand(wParam, lParam);
}

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

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

void CListCtrlEx::OnItemdblclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
	// TODO: Add your control notification handler code here
	
	*pResult = 0;
}
/*
void CListCtrlEx::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
int nFind=0;
TCHAR cc[1200],cc0[50],cc1[50],cc2[100],cc3[100],cc4[1000];//,cc5[10],cc6[200],cc7[10];
int test=HitTest( point);
CString sTrainno,sType,sStart,sEndstop;//,sRoute,sLen,sGrp_cont,sGood;
if(test>-1)
	{
	int start=max(50*m_nStepNum,0);
	test=start+test;
	if(m_nIsListAll)//&&test<2205)
		{
		sTrainno=g_pFieldArray0[test][0];
		sType=g_pFieldArray0[test][1];
		sStart=g_pFieldArray0[test][2];
		sEndstop=g_pFieldArray0[test][3];
		//sRoute=g_pFieldArray0[test][4];
		//sLen=g_pFieldArray0[test][5];
		//sGrp_cont=g_pFieldArray0[test][6];
		//sGood=g_pFieldArray0[test][7];
		}
	else
		{
		if(test<g_wStationsArray.GetSize())
			{
			sTrainno=g_pFieldArray0[g_wStationsArray[test]][0];
			sType=g_pFieldArray0[g_wStationsArray[test]][1];
			sStart=g_pFieldArray0[g_wStationsArray[test]][2];
			sEndstop=g_pFieldArray0[g_wStationsArray[test]][3];
		//	sRoute=g_pFieldArray0[g_wStationsArray[test]][4];
		//	sLen=g_pFieldArray0[g_wStationsArray[test]][5];
		//	sGrp_cont=g_pFieldArray0[g_wStationsArray[test]][6];
		//	sGood=g_pFieldArray0[g_wStationsArray[test]][7];
			}
		}

	//int len=(sTrainno+sType+sStart+sEndstop+sRoute+sLen+sGrp_cont+sGood).GetLength();
	int len=(sTrainno+sType+sStart+sEndstop).GetLength();
	if(len<1)
		{
//		AfxMessageBox(_T("0"));
		CListCtrl::OnLButtonDblClk(nFlags, point);
		return;
		}
	int count=0;
	g_cb.optStart( );
	for( int rc = g_data.top( ); rc != r4eof ; rc = g_data.skip( ) ) 
		{
		wsprintf(cc0,_T("%S"),Field4memo(g_data,1).strTian());//Trainno
		wsprintf(cc1,_T("%S"),Field4memo(g_data,2).strTian());//Type
		wsprintf(cc2,_T("%S"),Field4memo(g_data,3).strTian());//Start
		wsprintf(cc3,_T("%S"),Field4memo(g_data,4).strTian());//Endstop
		//wsprintf(cc4,_T("%S"),Field4memo(g_data,5).strTian());//Route
		//wsprintf(cc5,_T("%S"),Field4memo(g_data,7).strTian());//Len
		//wsprintf(cc6,_T("%S"),Field4memo(g_data,8).strTian());//Grp_cont
		//wsprintf(cc7,_T("%S"),Field4memo(g_data,10).strTian());//GOOD
		if(StationIn(cc0,sTrainno)&&StationIn(cc1,sType)
			&&StationIn(cc2,sStart)&&StationIn(cc3,sEndstop)
			&&StationIn(cc4,sRoute)&&StationIn(cc5,sLen)
			&&StationIn(cc6,sGrp_cont)&&StationIn(cc7,sGood))
			{
			nFind=1;
			break;//Find
			}
		count++;
		}
	if(nFind==0)
		{
		CListCtrl::OnLButtonDblClk(nFlags, point);
		return;
		}
	wsprintf(cc,_T("%S"),Field4memo(g_data,6).strTian());//Middle stations
	len=strlen(Field4memo(g_data,6).strTian());
	if(len<1)
			{
			CListCtrl::OnLButtonDblClk(nFlags, point);
			return;
			}
	TCHAR* cc=new TCHAR[len+1];
	wsprintf(cc,_T("%S"),Field4memo(g_data,6).strTian());
				
	len=strlen(Field4memo(g_data,9).strTian());
	if(len<1)
		{
		p_dlg->m_sNote="";
		}
	else
		{
		TCHAR* cc2=new TCHAR[len+1];
		wsprintf(cc2,_T("%S"),Field4memo(g_data,9).strTian());//char*toTCHAR*
		p_dlg->m_sNote=cc2;
	//	AfxMessageBox(cc2);
		delete[] cc2;
		}
	p_dlg->m_strTo=cc;
	delete[] cc;
	if(m_nIsListAll)
		{
		p_dlg->m_sTitle=MyMakeUpperAndRemoveSpaces(g_pFieldArray0[test][0]);
		}
	else
		{
		p_dlg->m_sTitle=MyMakeUpperAndRemoveSpaces(g_pFieldArray0[g_wStationsArray[test]][0]);
		}
	p_dlg->m_bDisplayNote=0;
	p_dlg->DoModal();
	}
CListCtrl::OnLButtonDblClk(nFlags, point);
}
*/

CString CListCtrlEx::MyMakeUpperAndRemoveSpaces(CString str)
{
CString sCSpace=" ";
CString temp="";
CString strRtn="";
int i=0;
while(i<str.GetLength())
	{
	temp=str[i];
	if(((unsigned char)str[i]>0xA0)&&((i+1)<str.GetLength()))
		{
		temp+=str[i+1];
		if(temp!=sCSpace)
			strRtn+=temp;
		i++;
		i++;
		}
	else
		{
		if(temp!=" "&&temp!="\n")
			{
			temp.MakeUpper();
			strRtn+=temp;
			}
		i++;
		}
	}
return strRtn;
}

int  CListCtrlEx::StationIn(TCHAR* cc,CString s)
{
if(s=="")return 1;
int nRtn=0;
CString ss=cc;
int pos=ss.Find(s);
if(pos>-1)nRtn=1;
return nRtn;
}

void CListCtrlEx::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
int test=HitTest( point);
memset(g_pMemoFieldBuf,0,2409);
g_dbf.SetFieldOffset(5);
DWORD len;
DWORD l;
CString s;
if(test>-1)
	{
	int start=max(10*m_nStepNum,0);
	test=start+test;
	if(m_nIsListAll)//&&test<2205)
		{
		len=g_dbf.InitGetMemField(test+1,g_pFieldBuf);
		l=g_dbf.GetMemFieldStr(g_pMemoFieldBuf,len);
		g_pMemoFieldBuf[len+1]='\0';
		p_dlg->m_strTo=g_dbf.CharToWideChar(g_pMemoFieldBuf,len);
		len=g_dbf.ReadFieldStr(test+1,0,g_pFieldBuf);
		s=g_dbf.CharToWideChar(g_pFieldBuf,len);
		p_dlg->m_sTitle=MyMakeUpperAndRemoveSpaces(s);
		}
	else
		{
		if(test<g_wStationsArray.GetSize())
			{
			len=g_dbf.InitGetMemField(g_wStationsArray[test]+1,g_pFieldBuf);
			l=g_dbf.GetMemFieldStr(g_pMemoFieldBuf,len);
			g_pMemoFieldBuf[len+1]='\0';
			p_dlg->m_strTo=g_dbf.CharToWideChar(g_pMemoFieldBuf,len);
			len=g_dbf.ReadFieldStr(g_wStationsArray[test]+1,0,g_pFieldBuf);
			s=g_dbf.CharToWideChar(g_pFieldBuf,len);
			p_dlg->m_sTitle=MyMakeUpperAndRemoveSpaces(s);
			}
		}
	p_dlg->m_sNote="";
	p_dlg->m_bDisplayNote=0;
	p_dlg->DoModal();
	}

CListCtrl::OnLButtonDblClk(nFlags, point);
}

⌨️ 快捷键说明

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