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

📄 namelistdlg.cpp

📁 视频播放控制器程序
💻 CPP
字号:
// NameListDlg.cpp : implementation file
//

#include "stdafx.h"
#include "LiveController.h"
#include "NameListDlg.h"


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




CNameManage *WBname = NULL; //原有名单
CNameManage *pHead = NULL;  //原头指针
CNameManage *p=pHead;

CNameManage *pphead = NULL;    //新建头指针
CNameManage *newname = NULL; //新建名单	
CNameManage *ppp=pphead;;

CString AddFileName;
int ccount;
int newcount=0;
BOOL CreateFlag = FALSE;
BOOL ReleaseFlag = FALSE;


#define BLACK_NAME_LIST "黑名单"
#define WHITE_NAME_LIST "白名单"
#define Black 0
#define White 1
////////////////////////////////////////////////////////////////////////////
// CNameListDlg dialog


CNameListDlg::CNameListDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CNameListDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CNameListDlg)
	m_addnewName = _T("");
	//}}AFX_DATA_INIT
}


void CNameListDlg::ShowNameList(CNameManage *ph)
{
	CString strTemp;
	LVITEM tempLvi;
	tempLvi.mask = LVIF_IMAGE | LVIF_TEXT;
	tempLvi.stateMask = -1;
	int nIndex=0;
	while (ph)
	{
		// word
		tempLvi.iItem = nIndex;
		tempLvi.iSubItem = 0;
		tempLvi.pszText = (char *)(LPCTSTR)(ph->name);
		m_ctrNameList.InsertItem(&tempLvi);

		// type
		tempLvi.iSubItem = 1;
		tempLvi.pszText = (char *)(LPCTSTR)(ph->type);
		m_ctrNameList.SetItem( &tempLvi );
		ph = ph->pNext;
		nIndex++;
	}
}




void CNameListDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CNameListDlg)
	DDX_Control(pDX, IDC_CB_BorW, m_ctrSelectWB);
	DDX_Control(pDX, IDC_LIST_NameList, m_ctrNameList);
	DDX_Text(pDX, IDC_AddName, m_addnewName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CNameListDlg, CDialog)
	//{{AFX_MSG_MAP(CNameListDlg)
	ON_BN_CLICKED(IDC_BN_NameList_IMPORT, OnBNNameListIMPORT)
	ON_NOTIFY(NM_CLICK, IDC_LIST_NameList, OnClickLISTNameList)
	ON_BN_CLICKED(IDC_BN_Name_ADD, OnBNNameADD)
	ON_BN_CLICKED(IDC_BN_Name_DEL, OnBNNameDEL)
	ON_BN_CLICKED(IDC_BN_CreateList, OnBNCreateList)
	ON_BN_CLICKED(IDC_BN_SaveNameList, OnBNSaveNameList)
	ON_BN_CLICKED(IDC_BN_AddIn, OnBNAddIn)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNameListDlg message handlers

BOOL CNameListDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	LVCOLUMN	lvcol;
	lvcol.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT;
	lvcol.fmt = LVCFMT_LEFT;
	lvcol.pszText = _T( "用户ID" );
	lvcol.iSubItem = 1;
	m_ctrNameList.InsertColumn( 0, &lvcol );
	m_ctrNameList.SetColumnWidth( 0, 120);
	lvcol.pszText = _T( "类型" );
	m_ctrNameList.InsertColumn( 1, &lvcol );
	m_ctrNameList.SetColumnWidth( 1, 90 );

    nSelect=-1;
	GetDlgItem(IDC_BN_Name_DEL)->EnableWindow(FALSE);
	
	DWORD dwStyle = m_ctrNameList.GetExtendedStyle();
	dwStyle |= LVS_EX_FULLROWSELECT;
	dwStyle |= LVS_EX_GRIDLINES;
    m_ctrNameList.SetExtendedStyle(dwStyle);

	m_ctrSelectWB.ShowWindow(SW_HIDE);

	int nIndex = m_ctrSelectWB.AddString( WHITE_NAME_LIST );
	m_ctrSelectWB.SetItemData( nIndex, White );
	nIndex = m_ctrSelectWB.AddString(BLACK_NAME_LIST);
	m_ctrSelectWB.SetItemData( nIndex, Black );
	m_ctrSelectWB.SetCurSel(0);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CNameListDlg::OnBNNameListIMPORT() 
{
	// TODO: Add your control notification handler code here
	if (pHead!=NULL)
	{
		CNameManage *temp=pHead;
		while (temp!=NULL)
		{
			pHead = temp->pNext;
			delete temp;
			temp = pHead;
		}
	}			
	m_ctrNameList.DeleteAllItems();
	static char BASED_CODE szFilter[] = "(*.ini)|*.ini||"; 
	CFileDialog filedlg(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);
	CString temp;
	int i=0;

	if (filedlg.DoModal()==IDOK)
	{
		CString FileName;
		FileName = filedlg.GetPathName();
		FileName = Replacer(FileName);
		AddFileName = FileName;
		WBname = new CNameManage();
		WBname->index = i;
		temp.Format("%d",WBname->index);
		GetPrivateProfileString(temp,"name","Default",WBname->name.GetBuffer(MAX_PATH),MAX_PATH,AddFileName);
		GetPrivateProfileString(temp,"type","Default",WBname->type.GetBuffer(MAX_PATH),MAX_PATH,AddFileName);
		pHead = WBname;
		p = WBname;
		i++;
		for (p=pHead;p!=NULL;p=p->pNext)
		{
			WBname = new CNameManage();
			WBname->index = i;
			WBname->pNext = NULL;
			temp.Format("%d",WBname->index);
			GetPrivateProfileString(temp,"name","Default",WBname->name.GetBuffer(MAX_PATH),MAX_PATH,AddFileName);
			GetPrivateProfileString(temp,"type","Default",WBname->type.GetBuffer(MAX_PATH),MAX_PATH,AddFileName);
			if (WBname->name == "Default")
			{
				delete WBname;
				break;
			}
			p->pNext= WBname;
			i++;
		}
		ccount = i;
		CNameManage *ptemp;
		ptemp = pHead;
		if (ptemp->name == "Default")
		{
			AfxMessageBox("导入文件内容为空!");
			m_ctrNameList.DeleteAllItems();
		}
		else
			ShowNameList(ptemp); //将文件内容显示在列表中

	}
	else
		return;
	
}

void CNameListDlg::OnClickLISTNameList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	LPNMITEMACTIVATE pNmitem = (LPNMITEMACTIVATE)pNMHDR;
	UINT uFlags;
	nSelect = m_ctrNameList.HitTest( CPoint(pNmitem->ptAction), &uFlags );
	if ( nSelect < 0 )
	{
		GetDlgItem(IDC_BN_Name_DEL)->EnableWindow(FALSE);	
		*pResult = 0;
		return;
	}
	
	GetDlgItem(IDC_BN_Name_DEL)->EnableWindow(TRUE);
	*pResult = 0;
}

void CNameListDlg::OnBNNameADD() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CString newtype;
	/////////////////新建选类型////////////////
	if (CreateFlag==TRUE)
	{
		int Gettype;
		Gettype = m_ctrSelectWB.GetItemData(m_ctrSelectWB.GetCurSel() );
		newtype.Format("%d",Gettype);
		if (pHead == NULL)
		{
			ReleaseFlag = TRUE;
		}
		if (ReleaseFlag == FALSE && pHead != NULL)
		{
		/////////////////新建后pHead不为空,则释放pHead///////////////////////////////
			CNameManage *temp=pHead;
			while (temp!=NULL)
			{
				pHead = temp->pNext;
				delete temp;
				temp = pHead;
			}
			ReleaseFlag = TRUE;
		}
		
	}
	else
	{
		int pindex =0;
		newtype = m_ctrNameList.GetItemText(pindex,1);
	}


	CNameManage *newnew;
	newnew = new CNameManage();


	CString strTemp;
	LVITEM tempLvi;
	tempLvi.mask = LVIF_IMAGE | LVIF_TEXT;
	tempLvi.stateMask = -1;
	
	if (m_addnewName.IsEmpty())
	{
		AfxMessageBox("用户不能为空,请重新填写!");
	}
	else
	{
		// word
		tempLvi.iItem = m_ctrNameList.GetItemCount();
		tempLvi.iSubItem = 0;
		tempLvi.pszText = (char *)(LPCTSTR)(m_addnewName);
		m_ctrNameList.InsertItem(&tempLvi);

		// type
		tempLvi.iSubItem = 1;
		tempLvi.pszText = (char *)(LPCTSTR)(newtype);
		m_ctrNameList.SetItem( &tempLvi );




	
		if (CreateFlag==TRUE )
		{
		
			if (newcount==0)
			{
				pHead = newnew;
				p = newnew;
				newnew->index = newcount;
				newnew->name = m_addnewName;
				newnew->type = newtype;
				newnew->pNext = NULL;
				newcount++;

			}
			else
			{
				newnew->index = newcount;
				newnew->name = m_addnewName;
				newnew->type = newtype;
				newnew->pNext = NULL;
				p->pNext = newnew;
				p = p->pNext;
				newcount++;
			}
	
		}
		//////////////////打开原有列表状况////////////////////////////////////////////
		else
		{
			ccount = m_ctrNameList.GetItemCount()-1;
			newnew->index = ccount;
			newnew->name = m_addnewName;
			newnew->pNext = NULL;
			newnew->type = newtype;
			p->pNext = newnew;//////////黑名单过不去
			p = p->pNext;
			ccount++;
		}		
	}
	m_addnewName.Empty();
	UpdateData(FALSE);	
}

void CNameListDlg::OnBNNameDEL() 
{
	// TODO: Add your control notification handler code here
	CNameManage *temp = pHead;
	if (nSelect==0)
	{
		CNameManage *pSave = pHead;
		pHead = pHead->pNext;
		delete pSave;
	}
	else
	{
		for (int i=1;temp->pNext!=NULL;i++)
		{
			if (i==nSelect)
			{
				CNameManage *pdelete = temp->pNext;
				temp->pNext= temp->pNext->pNext;
				delete pdelete;
				break;
			}
			else
				temp = temp->pNext;
		}

	}

	m_ctrNameList.DeleteAllItems();////////////////清空列表

	CNameManage *ptemp;
	ptemp = pHead;
	ShowNameList(ptemp); ///////////////////////////重新显示
}

void CNameListDlg::OnBNCreateList() 
{
	// TODO: Add your control notification handler code here
	m_ctrNameList.DeleteAllItems();
	CreateFlag = TRUE;
	ReleaseFlag = FALSE;
	m_ctrSelectWB.ShowWindow(SW_SHOW);


	

	CFileDialog dlg(FALSE, "ini",NULL,OFN_OVERWRITEPROMPT|OFN_HIDEREADONLY,
   "文本文件(*.ini)|*.ini||", this);
	dlg.m_ofn.lpstrTitle = _T("保存过滤词汇文件");

	CString fileName;
	if (dlg.DoModal() == IDOK)
	{
		// 实现存盘
		fileName = dlg.GetPathName();
		fileName =Replacer(fileName);
		AddFileName=fileName;
	

		CFile file(fileName, CFile::modeCreate|CFile::modeReadWrite|CFile::shareExclusive);
		CArchive ar(&file, CArchive::store|CArchive::bNoFlushOnDelete);
		ar.Close();		
		file.Close();
	}
	else
		return;
	
}

void CNameListDlg::OnBNSaveNameList() 
{
	// TODO: Add your control notification handler code here
		////////////////////将列表中的值加入进链表//////////////////
	int i=0;
	newname = new CNameManage();
	newname->index = i;
	newname->name = m_ctrNameList.GetItemText(i,0);
	newname->type = m_ctrNameList.GetItemText(i,1);
	pphead = newname;
	ppp = newname;
	i++;
	for (ppp=pphead;ppp!=NULL;ppp=ppp->pNext)
	{
		newname = new CNameManage();
		newname->index = i;
		newname->pNext = NULL;
		newname->name = m_ctrNameList.GetItemText(i,0);
		newname->type = m_ctrNameList.GetItemText(i,1);
		if (i==m_ctrNameList.GetItemCount())
		{
			delete newname;
			break;
		}
		ppp->pNext= newname;
		i++;
	}
	////////////////////////////////////////////////////////////////////


	CFile file;
	file.Open(AddFileName,CFile::modeCreate|CFile::modeWrite);   
	file.Close();


	int j =0;
	CNameManage *tt=pphead;
	while (tt)
	{
		tt->index = j;
		CString tmp;
		tmp.Format("%d",tt->index);
		WritePrivateProfileString(tmp,"name",tt->name,AddFileName);
		WritePrivateProfileString(tmp,"type",tt->type,AddFileName);
		tt = tt->pNext;
		j++;
	}

		///////////////将整个链表释放掉/////////////////////////////////////////
	if (pHead!=NULL)
	{
		CNameManage *temp=pHead;
		while (temp!=NULL)
		{
			pHead = temp->pNext;
			delete temp;
			temp = pHead;
		}
	}
	////////////////////////////////////////////////////////////////////////

	AfxMessageBox("文件保存成功!");
}

void CNameListDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	CDialog::OnCancel();
}

void CNameListDlg::OnBNAddIn() 
{
	// TODO: Add your control notification handler code here
	CNameManage *head = NULL;//导入文件的头指针
	CNameManage *q = head;   //功能如p

	CString temp;
	static char BASED_CODE szFilter[] = "(*.ini)|*.ini||"; 
	CFileDialog filedlg(true,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);
	int i = 0;
	if (filedlg.DoModal()==IDOK)
	{
		CString FileName;
		FileName = filedlg.GetPathName();
		FileName = Replacer(FileName);

		WBname = new CNameManage();
		WBname->index = i;
		temp.Format("%d",WBname->index);
		GetPrivateProfileString(temp,"name","Default",WBname->name.GetBuffer(MAX_PATH),MAX_PATH,FileName);
		GetPrivateProfileString(temp,"type","Default",WBname->type.GetBuffer(MAX_PATH),MAX_PATH,FileName);

		head = WBname;
		q = WBname;
		i++;
		for (q=head;q!=NULL;q=q->pNext)
		{
			WBname = new CNameManage();
			WBname->index = i;
			WBname->pNext = NULL;
			temp.Format("%d",WBname->index);
			GetPrivateProfileString(temp,"name","Default",WBname->name.GetBuffer(MAX_PATH),MAX_PATH,FileName);
			GetPrivateProfileString(temp,"type","Default",WBname->type.GetBuffer(MAX_PATH),MAX_PATH,FileName);
			if (WBname->name == "Default")
			{
				delete WBname;
				break;
			}
			q->pNext = WBname;
			i++;
		}
		if (pHead == NULL)
		{
			pHead = head;
			p = q;
		}
		else
		{
			p->pNext = head;//导入与原有连接起来
			p = q;
		}	
		m_ctrNameList.DeleteAllItems();
		CNameManage *ptemp;
		ptemp = pHead;
		if (ptemp->name == "Default" && ptemp->type == "Default")
		{
			AfxMessageBox("导入文件内容为空!");
			m_ctrNameList.DeleteAllItems();
		}
		else
			ShowNameList(ptemp);  //将文件内容显示在列表中	

	
	}
	else
		return;
}

⌨️ 快捷键说明

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