📄 listctrlex.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 + -