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

📄 testlistctrldlg.cpp

📁 ClistCtrl的使用完整实例 包括基本的属性设置、出入数据、实现排序等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    {
        *pResult = CDRF_NOTIFYITEMDRAW;
    }
    else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
    {
        // This is the notification message for an item. We'll request
        // notifications before each subitem's prepaint stage.
 
        *pResult = CDRF_NOTIFYSUBITEMDRAW;
    }
    else if ( (CDDS_ITEMPREPAINT | CDDS_SUBITEM) == pLVCD->nmcd.dwDrawStage )
    {
        // This is the prepaint stage for a subitem. Here's where we set the
        // item's text and background colors. Our return value will tell 
        // Windows to draw the subitem itself, but it will use the new colors
        // we set here.
        // The text color will cycle through red, green, and light blue.
        // The background color will be light blue for column 0, red for
        // column 1, and black for column 2.
    
        COLORREF crText, crBkgnd;
        
        if ( 0 == pLVCD->iSubItem )
        {
            crText = RGB(255,0,0);
            crBkgnd = RGB(128,128,255);
        }
        else if ( 1 == pLVCD->iSubItem )
        {
            crText = RGB(0,255,0);
            crBkgnd = RGB(255,0,0);
        }
        else
        {
            crText = RGB(128,128,255);
            crBkgnd = RGB(0,0,0);
        }
 
        // Store the colors back in the NMLVCUSTOMDRAW struct.
        pLVCD->clrText = crText;
        pLVCD->clrTextBk = crBkgnd;
 
        // Tell Windows to paint the control itself.
        *pResult = CDRF_DODEFAULT;
    }
*/
}

//单击表头排序
void CTestlistctrlDlg::OnColumnclickListTest(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	SortListItem(pNMListView->iSubItem);
	*pResult = 0;
}

//表头排序实现函数
void CTestlistctrlDlg::SortListItem(int i)
{
	CString strtemp;
	switch(i)
	{
	case 0:
		if(m_bGreater)
		{
			m_ctrlList.DeleteAllItems();
			int i=0;
			for(iIterGreater=mNumGreater.begin();iIterGreater!=mNumGreater.end();iIterGreater++)
			{
				strtemp.Format("%d",(iIterGreater->second).nNum);
				m_ctrlList.InsertItem(i,strtemp);
				m_ctrlList.SetItemText(i,1,(iIterGreater->second).strName);
				strtemp.Format("%d",(iIterGreater->second).nScore);
				m_ctrlList.SetItemText(i,2,strtemp);
				i++;
			}
			m_bGreater = false;
		}
		else
		{
			m_ctrlList.DeleteAllItems();
			int i=0;
			for(iIterLess=mNumLess.begin();iIterLess!=mNumLess.end();iIterLess++)
			{
				strtemp.Format("%d",(iIterLess->second).nNum);
				m_ctrlList.InsertItem(i,strtemp);
				m_ctrlList.SetItemText(i,1,(iIterLess->second).strName);
				strtemp.Format("%d",(iIterLess->second).nScore);
				m_ctrlList.SetItemText(i,2,strtemp);
				i++;
			}
			m_bGreater = true;
		}
		break;
	case 1:
		if(m_bGreater)
		{
			m_ctrlList.DeleteAllItems();
			int i=0;
			for(strIterGreater=mNameGreater.begin();strIterGreater!=mNameGreater.end();strIterGreater++)
			{
				strtemp.Format("%d",(strIterGreater->second).nNum);
				m_ctrlList.InsertItem(i,strtemp);
				m_ctrlList.SetItemText(i,1,(strIterGreater->second).strName);
				strtemp.Format("%d",(strIterGreater->second).nScore);
				m_ctrlList.SetItemText(i,2,strtemp);
				i++;
			}
			m_bGreater = false;
		}
		else
		{
			m_ctrlList.DeleteAllItems();
			int i=0;
			for(strIterLess=mNameLess.begin();strIterLess!=mNameLess.end();strIterLess++)
			{
				strtemp.Format("%d",(strIterLess->second).nNum);
				m_ctrlList.InsertItem(i,strtemp);
				m_ctrlList.SetItemText(i,1,(strIterLess->second).strName);
				strtemp.Format("%d",(strIterLess->second).nScore);
				m_ctrlList.SetItemText(i,2,strtemp);
				i++;
			}
			m_bGreater = true;
		}
		break;
	case 2:
		if(m_bGreater)
		{
			m_ctrlList.DeleteAllItems();
			int i=0;
			for(iIterGreater=mScoreGreater.begin();iIterGreater!=mScoreGreater.end();iIterGreater++)
			{
				strtemp.Format("%d",(iIterGreater->second).nNum);
				m_ctrlList.InsertItem(i,strtemp);
				m_ctrlList.SetItemText(i,1,(iIterGreater->second).strName);
				strtemp.Format("%d",(iIterGreater->second).nScore);
				m_ctrlList.SetItemText(i,2,strtemp);
				i++;
			}
			m_bGreater = false;
		}
		else
		{
			m_ctrlList.DeleteAllItems();
			int i=0;
			for(iIterLess=mScoreLess.begin();iIterLess!=mScoreLess.end();iIterLess++)
			{
				strtemp.Format("%d",(iIterLess->second).nNum);
				m_ctrlList.InsertItem(i,strtemp);
				m_ctrlList.SetItemText(i,1,(iIterLess->second).strName);
				strtemp.Format("%d",(iIterLess->second).nScore);
				m_ctrlList.SetItemText(i,2,strtemp);
				i++;
			}
			m_bGreater = true;
		}
		break;
	default:
		break;
	}
}

//初始化列表
void CTestlistctrlDlg::InitList()
{
	CRect listrect;
	listitem listitemtemp;
	typedef pair <int,listitem> ipair;
	typedef pair <CString,listitem> strpair;

	m_ctrlList.GetWindowRect(&listrect);
	m_ctrlList.InsertColumn(0,_T("学\n号"),LVCFMT_CENTER,(listrect.Width()-3)/3);
	m_ctrlList.InsertColumn(1,_T("姓名"),LVCFMT_CENTER,(listrect.Width()-3)/3);
	m_ctrlList.InsertColumn(2,_T("成绩"),LVCFMT_CENTER,(listrect.Width()-3)/3);

	m_ctrlList.InsertItem(0,_T("200801"));
	m_ctrlList.SetItemText(0,1,_T("张三"));
	m_ctrlList.SetItemText(0,2,_T("90"));
	listitemtemp.nNum = atoi(m_ctrlList.GetItemText(0,0));
	listitemtemp.strName = m_ctrlList.GetItemText(0,1);
	listitemtemp.nScore = atoi(m_ctrlList.GetItemText(0,2));

	mNumLess.insert(ipair(listitemtemp.nNum,listitemtemp));
	mNumGreater.insert(ipair(listitemtemp.nNum,listitemtemp));
	mNameLess.insert(strpair(listitemtemp.strName,listitemtemp));
	mNameGreater.insert(strpair(listitemtemp.strName,listitemtemp));
	mScoreLess.insert(ipair(listitemtemp.nScore,listitemtemp));
	mScoreGreater.insert(ipair(listitemtemp.nScore,listitemtemp));


	m_ctrlList.InsertItem(1,_T("200802"));
	m_ctrlList.SetItemText(1,1,_T("李四"));
	m_ctrlList.SetItemText(1,2,_T("80"));
	listitemtemp.nNum = atoi(m_ctrlList.GetItemText(1,0));
	listitemtemp.strName = m_ctrlList.GetItemText(1,1);
	listitemtemp.nScore = atoi(m_ctrlList.GetItemText(1,2));

	mNumLess.insert(ipair(listitemtemp.nNum,listitemtemp));
	mNumGreater.insert(ipair(listitemtemp.nNum,listitemtemp));
	mNameLess.insert(strpair(listitemtemp.strName,listitemtemp));
	mNameGreater.insert(strpair(listitemtemp.strName,listitemtemp));
	mScoreLess.insert(ipair(listitemtemp.nScore,listitemtemp));
	mScoreGreater.insert(ipair(listitemtemp.nScore,listitemtemp));

	m_ctrlList.InsertItem(2,_T("200804"));
	m_ctrlList.SetItemText(2,1,_T("赵六"));
	m_ctrlList.SetItemText(2,2,_T("70"));
	listitemtemp.nNum = atoi(m_ctrlList.GetItemText(2,0));
	listitemtemp.strName = m_ctrlList.GetItemText(2,1);
	listitemtemp.nScore = atoi(m_ctrlList.GetItemText(2,2));

	mNumLess.insert(ipair(listitemtemp.nNum,listitemtemp));
	mNumGreater.insert(ipair(listitemtemp.nNum,listitemtemp));
	mNameLess.insert(strpair(listitemtemp.strName,listitemtemp));
	mNameGreater.insert(strpair(listitemtemp.strName,listitemtemp));
	mScoreLess.insert(ipair(listitemtemp.nScore,listitemtemp));
	mScoreGreater.insert(ipair(listitemtemp.nScore,listitemtemp));

	m_ctrlList.InsertItem(3,_T("200803"));
	m_ctrlList.SetItemText(3,1,_T("王五"));
	m_ctrlList.SetItemText(3,2,_T("100"));
	listitemtemp.nNum = atoi(m_ctrlList.GetItemText(3,0));
	listitemtemp.strName = m_ctrlList.GetItemText(3,1);
	listitemtemp.nScore = atoi(m_ctrlList.GetItemText(3,2));

	mNumLess.insert(ipair(listitemtemp.nNum,listitemtemp));
	mNumGreater.insert(ipair(listitemtemp.nNum,listitemtemp));
	mNameLess.insert(strpair(listitemtemp.strName,listitemtemp));
	mNameGreater.insert(strpair(listitemtemp.strName,listitemtemp));
	mScoreLess.insert(ipair(listitemtemp.nScore,listitemtemp));
	mScoreGreater.insert(ipair(listitemtemp.nScore,listitemtemp));

	m_ctrlList.SetExtendedStyle(m_ctrlList.GetExtendedStyle()
			|LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT );
}

void CTestlistctrlDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	OnOK();
}

void CTestlistctrlDlg::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知处理程序代码
	OnCancel();
}

⌨️ 快捷键说明

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