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

📄 sortcolumn.cpp

📁 Interactive SQL Tool
💻 CPP
字号:
// CSortColumn.cpp: implementation of the CSortColumn class.
//

#include "stdafx.h"

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

//////////////////////////////////////////////////////////////////////
// CSortColumn

CSortColumn::CSortColumn()
{
	ASSERT(FALSE); // use the other one
}

CSortColumn::CSortColumn(CListCtrl* pWnd, const int& nCol, const bool& bIsNumeric)
{
    m_nCol = nCol;
    m_pWnd = pWnd;
    m_bIsNumeric = bIsNumeric;
    
    ASSERT(m_pWnd);
    int nMax = m_pWnd->GetItemCount();
    DWORD dwData;
    CString sTxt;
    if(m_bIsNumeric)
    {
        for(int n = 0; n < nMax; n++)
        {
            dwData = m_pWnd->GetItemData(n);
            sTxt = m_pWnd->GetItemText(n, m_nCol);
            m_pWnd->SetItemData(n, (DWORD)new CSortItemInt(dwData, sTxt));
        }
    }
    else
    {
        for(int n = 0; n < nMax; n++)
        {
            dwData = m_pWnd->GetItemData(n);
            sTxt = m_pWnd->GetItemText(n, m_nCol);
            m_pWnd->SetItemData(n, (DWORD)new CSortItemText(dwData, sTxt));
        }
    }
}

CSortColumn::~CSortColumn()
{
    ASSERT(m_pWnd);
    int nMax = m_pWnd->GetItemCount();
	if(m_bIsNumeric)
    {
        CSortItemInt* pItem;
		for(int n = 0; n < nMax; n++)
        {
            pItem = (CSortItemInt*)m_pWnd->GetItemData(n);
            ASSERT(pItem);
            m_pWnd->SetItemData(n, pItem->m_dwData);
            delete pItem;
        }
    }
    else
    {
        CSortItemText* pItem;
        for(int n = 0; n < nMax; n++)
        {
            pItem = (CSortItemText*)m_pWnd->GetItemData(n);
            ASSERT(pItem);
            m_pWnd->SetItemData(n, pItem->m_dwData);
            delete pItem;
        }
    }
}

void CSortColumn::Sort(const bool& bAsc)
{
    if(m_bIsNumeric)
    {
        if(bAsc)
            m_pWnd->SortItems(CompareAscInt, 0L);
		else
            m_pWnd->SortItems(CompareDesInt, 0L);
    }
    else
    {
        if(bAsc)
            m_pWnd->SortItems(CompareAscText, 0L);
		else
            m_pWnd->SortItems(CompareDesText, 0L);
    }
}

int CALLBACK CSortColumn::CompareAscText(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    CSortItemText* pItem1 = (CSortItemText*)lParam1;
    CSortItemText* pItem2 = (CSortItemText*)lParam2;
    ASSERT(pItem1 && pItem2);
    return pItem1->m_strTxt.CompareNoCase(pItem2->m_strTxt);
}

int CALLBACK CSortColumn::CompareDesText(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    CSortItemText* pItem1 = (CSortItemText*)lParam1;
    CSortItemText* pItem2 = (CSortItemText*)lParam2;
    ASSERT(pItem1 && pItem2);
    return pItem2->m_strTxt.CompareNoCase(pItem1->m_strTxt);
}

int CALLBACK CSortColumn::CompareAscInt(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    CSortItemInt* pItem1 = (CSortItemInt*)lParam1;
    CSortItemInt* pItem2 = (CSortItemInt*)lParam2;
    ASSERT(pItem1 && pItem2);
    if(pItem1->m_nInt == pItem2->m_nInt)
		return 0;
    return pItem1->m_nInt > pItem2->m_nInt ? 1 : -1;
}

int CALLBACK CSortColumn::CompareDesInt(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    CSortItemInt* pItem1 = (CSortItemInt*)lParam1;
    CSortItemInt* pItem2 = (CSortItemInt*)lParam2;
    ASSERT(pItem1 && pItem2);
    if(pItem1->m_nInt == pItem2->m_nInt)
		return 0;
    return pItem1->m_nInt < pItem2->m_nInt ? 1 : -1;
}

//////////////////////////////////////////////////////////////////////
// CSortItemText

CSortItemText::CSortItemText()
{
	ASSERT(FALSE); // use the other one  
}

CSortItemText::CSortItemText(const DWORD& dwData, const CString& sTxt)
{
    m_dwData = dwData;
    m_strTxt = sTxt;
}

CSortItemText::~CSortItemText()
{
}

//////////////////////////////////////////////////////////////////////
// CSortItemInt

CSortItemInt::CSortItemInt()
{
	ASSERT(FALSE); // use the other one  
}

CSortItemInt::CSortItemInt(const DWORD& dwData, const CString& sTxt)
{
    m_dwData = dwData;
#ifdef _UNICODE
	USES_CONVERSION;
	m_nInt = atoi(W2CA((LPCTSTR)sTxt));
#else
	m_nInt = atoi((LPCTSTR)sTxt);
#endif
}

CSortItemInt::~CSortItemInt()
{
}

⌨️ 快捷键说明

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