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

📄 mylistctrl.cpp

📁 这个是一个比较全的超市管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	i=InsertColumn( m_iNumColumns++, strName, nFormat, iWidth );
	if(i!=-1)
	{
		CString str;
		str.Format("%d",intEdit);
		strArrayEditStyle.InsertAt(i,str);
		if(intEdit==ctr_Edit_CboDown||intEdit==ctr_Edit_CboDownList)
		{
			CStringArray *strArray=new CStringArray;
			str.Format("%d",i);
			i=CboArrayIndex.GetSize();
			CboArrayIndex.InsertAt(i,str);
			CboArrayData.InsertAt(i,strArray);
		}
		if(intEdit==ctr_Edit_Num)
		{
			str.Format("%d",i);
			i=NumArrayIndex.GetSize();
			NumArrayIndex.InsertAt(i,str);
			CPoint *pt=new CPoint(10,0);
			NumArrayData.InsertAt(i,(CObject *)pt);
			str="0";
			NumArrayAuto.InsertAt(i,str);
		}
	}
	return i;
}
void CMyListCtrl::AddCboItem(int nItem,CString strText)
{
	CStringArray *strArray=GetCboArrayData(nItem);
	strArray->Add(strText);
}
void CMyListCtrl::RemoveCboItem(int nitem,CString strText)
{
	CStringArray *strArray=GetCboArrayData(nitem);
	for(int i=0;i<strArray->GetSize();i++)
	{	
		if(strArray->GetAt(i)==strText)
		{
			strArray->RemoveAt(i,strText.GetLength());
			return;
		}
	}
}
void CMyListCtrl::SetNumEditAuto(int nitem,BOOL blnAuto)
{
	if(GetColumnStyle(nitem)!=ctr_Edit_Num) return;
	CString str;
	str.Format("%d",nitem);
	int i=0;
	while(NumArrayIndex.GetAt(i)!=str && i<NumArrayIndex.GetSize())
	{
		i=i+1;
	}
	if(i==NumArrayIndex.GetSize() && NumArrayIndex.GetAt(i)!=str) return;
	if(blnAuto)
		str="1";
	else
		str="0";
	NumArrayAuto.SetAt(i,str);
}
BOOL CMyListCtrl::GetNumEditAuto(int nitem)
{
	if(GetColumnStyle(nitem)!=ctr_Edit_Num) return NULL;
	CString str;
	str.Format("%d",nitem);
	int i=0;
	while(NumArrayIndex.GetAt(i)!=str && i<NumArrayIndex.GetSize())
	{
		i=i+1;
	}
	if(i==NumArrayIndex.GetSize() && NumArrayIndex.GetAt(i)!=str) return NULL;
	str=NumArrayAuto.GetAt(i);
	BOOL bln;
	if(str=="1")
		bln=TRUE;
	else
		bln=FALSE;
	return bln;
}
void CMyListCtrl::SetNumEditStyle(int nitem,int intLeft,int intRight)
{
	CPoint *pt=GetNumEditStyle(nitem);
	pt->x=intLeft;
	pt->y=intRight;
}
CPoint *CMyListCtrl::GetNumEditStyle(int nitem)
{
	CString str;
	str.Format("%d",nitem);
	int i=0;
	while(NumArrayIndex.GetAt(i)!=str && i<NumArrayIndex.GetSize())
	{
		i=i+1;
	}
	if(i==NumArrayIndex.GetSize() && NumArrayIndex.GetAt(i)!=str) return NULL;
	CPoint *pt1=(CPoint *)NumArrayData.GetAt(i);
	return pt1;
}
void CMyListCtrl::FillCboData(int nitem)
{
	//ctl_EditComboDown.DeleteString()
	if(GetColumnStyle(nitem)==ctr_Edit_CboDown)
	{
		ctl_EditComboDown.ShowDropDown(FALSE);
		ctl_EditComboDown.ResetContent();
		CStringArray *strArry=GetCboArrayData(nitem);
		for(int i=0;i<strArry->GetSize();i++)
		{
			ctl_EditComboDown.AddString(strArry->GetAt(i));
		}
	}
	if(GetColumnStyle(nitem)==ctr_Edit_CboDownList)
	{
		ctl_EditComboDownList.ShowDropDown(FALSE);
		ctl_EditComboDownList.ResetContent();
		ctl_EditComboDownList.AddString("");
		CStringArray *strArry=GetCboArrayData(nitem);
		for(int i=0;i<strArry->GetSize();i++)
		{
			ctl_EditComboDownList.AddString(strArry->GetAt(i));
		}
	}

}
CStringArray *CMyListCtrl::GetCboArrayData(int nitem)
{
	CString str;
	str.Format("%d",nitem);
	int i=0;
	while(CboArrayIndex.GetAt(i)!=str && i<CboArrayIndex.GetSize())
	{
		i=i+1;
	}
	if(i==CboArrayIndex.GetSize() && CboArrayIndex.GetAt(i)!=str) return NULL;
	CStringArray *strArray=(CStringArray *)CboArrayData.GetAt(i);
	return strArray;
}
//设置单列
void CMyListCtrl::SetColumnStyle(int item,int intEdit)
{
	CString str;
	str.Format("%d",intEdit);
	strArrayEditStyle.SetAt(item,str);
}
//得到单列
int CMyListCtrl::GetColumnStyle(int item)
{
	CString str;
	str=strArrayEditStyle.GetAt(item);
	return(atoi(str));
}
//设置列头
BOOL CMyListCtrl::SetHeader()
{
	VERIFY( m_ctlHeader.SubclassWindow( GetHeaderCtrl()->GetSafeHwnd() ) );
	m_ctlHeader.SetDefault();
	return TRUE;
}
//释放内存
void CMyListCtrl::FreeItemMemory( const int iItem )
{
  ItemData* pid = reinterpret_cast<ItemData*>( CListCtrl::GetItemData( iItem ) ); 
  LPTSTR* arrpsz = pid->arrpsz;
  for( int i = 0; i < m_iNumColumns; i++ )
    delete[] arrpsz[ i ];
  delete[] arrpsz;
  delete pid;
  VERIFY( CListCtrl::SetItemData( iItem, NULL ) );
}
//删除单项
BOOL CMyListCtrl::DeleteItem( int iItem )
{
  FreeItemMemory( iItem );
  return CListCtrl::DeleteItem( iItem );
}
//删除单项
BOOL CMyListCtrl::DeleteAllItems()
{
  for( int iItem = 0; iItem < GetItemCount(); iItem ++ )
    FreeItemMemory( iItem );
  
  return CListCtrl::DeleteAllItems();
}
//数字型的判断
bool IsNumber( LPCTSTR pszText )
{
  ASSERT_VALID_STRING(pszText);
  int iDotCount=0;
  for(int i=0;i<lstrlen(pszText);i++){
    if(!_istdigit(pszText[i])){
      if(pszText[i]!='.')
        return false;
      iDotCount++;
      if(iDotCount>1)return false;
    }
  }
  return true;
}
//数字型的比较
int NumberCompare( LPCTSTR pszNumber1, LPCTSTR pszNumber2 )
{
  ASSERT_VALID_STRING(pszNumber1);
  ASSERT_VALID_STRING(pszNumber2);
  const double fNumber1=atof(pszNumber1);
  const double fNumber2=atof(pszNumber2);
  if(fNumber1<fNumber2)
    return -1;
  else if(fNumber1>fNumber2)
    return 1;
  return 0;
}
//时间性的判断
bool IsTime(LPCTSTR pszText)
{
  ASSERT_VALID_STRING( pszText );
  if( lstrlen( pszText ) != 8 )
    return false;
  
  return _istdigit(pszText[0])
    && _istdigit(pszText[1])
    && pszText[2]==_T(':')
    && _istdigit( pszText[ 3 ] )
    && _istdigit( pszText[ 4 ] )
    && pszText[5]==_T(':')
    && _istdigit( pszText[ 6 ] )
    && _istdigit( pszText[ 7 ] );
}
//日期型的判断
bool IsDate( LPCTSTR pszText )
{
  ASSERT_VALID_STRING( pszText );
  if( lstrlen( pszText ) != 10 )
    return false;
  
  return _istdigit(pszText[0])
    && _istdigit(pszText[1])
    && pszText[2]==_T('-')
    && _istdigit( pszText[ 3 ] )
    && _istdigit( pszText[ 4 ] )
    && pszText[5]==_T('-')
    && _istdigit( pszText[ 6 ] )
    && _istdigit( pszText[ 7 ] )
    && _istdigit( pszText[ 8 ] )
    && _istdigit( pszText[ 9 ] );
}
//日期时间型的判断
bool IsDateTime(LPCTSTR pszText)
{
  ASSERT_VALID_STRING( pszText );
  if( lstrlen( pszText ) != 18 )
    return false;
  return _istdigit(pszText[0])
    && _istdigit(pszText[1])
    && pszText[2]==_T(':')
    && _istdigit( pszText[ 3 ] )
    && _istdigit( pszText[ 4 ] )
    && pszText[5]==_T(':')
    && _istdigit( pszText[ 6 ] )
    && _istdigit( pszText[ 7 ] )
	&& _istdigit(pszText[ 8 ])
	&& _istdigit(pszText[9])
    && _istdigit(pszText[10])
    && pszText[11]==_T('-')
    && _istdigit( pszText[ 12 ] )
    && _istdigit( pszText[ 13] )
    && pszText[14]==_T('-')
    && _istdigit( pszText[ 15 ] )
    && _istdigit( pszText[ 16 ] )
    && _istdigit( pszText[ 17 ] )
    && _istdigit( pszText[ 18 ] );
}
//日期和时间性的比较
int DateTimeComPare(const CString &strTime1,const CString &strTime2)
{
  const int iHour1=atoi(strTime1.Mid(6, 2));
  const int iHour2=atoi(strTime2.Mid(6, 2));
  if(iHour1<iHour2)
    return -1;
  else if(iHour1>iHour2)
    return 1;
  const int iMin1=atoi(strTime1.Mid(3, 2));
  const int iMin2=atoi(strTime2.Mid(3, 2));
  if(iMin1<iMin2)
    return -1;  
  else if(iMin1>iMin2)
    return 1;
  const int iSec1=atoi(strTime1.Mid(0, 2));
  const int iSec2=atoi(strTime2.Mid(0, 2));
  if(iSec1<iSec2)
    return -1;
  else if(iSec1>iSec2)
    return 1;

  const int iYear1=atoi(strTime1.Mid(15, 4));
  const int iYear2=atoi(strTime2.Mid(15, 4));
  
  if(iYear1<iYear2)
    return -1;
  else if(iYear1>iYear2)
    return 1;
  
  const int iMonth1=atoi(strTime1.Mid(12, 2));
  const int iMonth2=atoi(strTime2.Mid(12, 2));
  
  if(iMonth1<iMonth2)
    return -1;  
  else if(iMonth1>iMonth2)
    return 1;
  
  const int iDay1=atoi(strTime1.Mid(9, 2));
  const int iDay2=atoi(strTime2.Mid(9, 2));
  
  if(iDay1<iDay2)
    return -1;
  else if(iDay1>iDay2)
    return 1;
  return 0;
}
//时间型的比较
int TimeCompare(const CString &strTime1,const CString &strTime2)
{
  const int iHour1=atoi(strTime1.Mid(6, 2));
  const int iHour2=atoi(strTime2.Mid(6, 2));
  
  if(iHour1<iHour2)
    return -1;
  else if(iHour1>iHour2)
    return 1;
  const int iMin1=atoi(strTime1.Mid(3, 2));
  const int iMin2=atoi(strTime2.Mid(3, 2));
  if(iMin1<iMin2)
    return -1;  
  else if(iMin1>iMin2)
    return 1;
  const int iSec1=atoi(strTime1.Mid(0, 2));
  const int iSec2=atoi(strTime2.Mid(0, 2));
  if(iSec1<iSec2)
    return -1;
  else if(iSec1>iSec2)
    return 1;

  return 0;
}
//日期型的比较
int DateCompare( const CString& strDate1, const CString& strDate2 )
{
  const int iYear1=atoi(strDate1.Mid(6, 4));
  const int iYear2=atoi(strDate2.Mid(6, 4));
  
  if(iYear1<iYear2)
    return -1;
  else if(iYear1>iYear2)
    return 1;
  
  const int iMonth1=atoi(strDate1.Mid(3, 2));
  const int iMonth2=atoi(strDate2.Mid(3, 2));
  
  if(iMonth1<iMonth2)
    return -1;  
  else if(iMonth1>iMonth2)
    return 1;
  
  const int iDay1=atoi(strDate1.Mid(0, 2));
  const int iDay2=atoi(strDate2.Mid(0, 2));
  
  if(iDay1<iDay2)
    return -1;
  else if(iDay1>iDay2)
    return 1;

  return 0;
}
int CALLBACK CMyListCtrl::CompareFunction( LPARAM lParam1, LPARAM lParam2, LPARAM lParamData )
{
  CMyListCtrl* pListCtrl = reinterpret_cast<CMyListCtrl*>( lParamData );
  ASSERT( pListCtrl->IsKindOf( RUNTIME_CLASS( CListCtrl ) ) );
  
  ItemData* pid1 = reinterpret_cast<ItemData*>( lParam1 );
  ItemData* pid2 = reinterpret_cast<ItemData*>( lParam2 );
  
  ASSERT( pid1 );
  ASSERT( pid2 );
  
  LPCTSTR pszText1 = pid1->arrpsz[ pListCtrl->m_iSortColumn ];
  LPCTSTR pszText2 = pid2->arrpsz[ pListCtrl->m_iSortColumn ];
  
  ASSERT_VALID_STRING( pszText1 );
  ASSERT_VALID_STRING( pszText2 );
  
	if(IsNumber(pszText1))
    return pListCtrl->m_bSortAscending ? NumberCompare( pszText1, pszText2 ) : NumberCompare( pszText2, pszText1 );
	else if(IsDate(pszText1))
    return pListCtrl->m_bSortAscending ? DateCompare( pszText1, pszText2 ) : DateCompare( pszText2, pszText1 );
	else if(IsTime(pszText1))
    return pListCtrl->m_bSortAscending ? TimeCompare( pszText1, pszText2 ) : TimeCompare( pszText2, pszText1 );
	else if(IsDateTime(pszText1))
    return pListCtrl->m_bSortAscending ? DateTimeComPare( pszText1, pszText2 ) : DateTimeComPare( pszText2, pszText1 );
    else
	return pListCtrl->m_bSortAscending ? lstrcmp( pszText1, pszText2 ) : lstrcmp( pszText2, pszText1 );
}
void CMyListCtrl::OnColumnClick( NMHDR* pNMHDR, LRESULT* pResult )
{
	SetEditPos(FALSE,itemX,itemY,FALSE);
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	const int iColumn = pNMListView->iSubItem;
	Sort( iColumn, iColumn == m_iSortColumn ? !m_bSortAscending : TRUE );
	*pResult = 0;

⌨️ 快捷键说明

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