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

📄 helplist.cpp

📁 cj60lib界面库 ,ado数据库编程 使用方法: 调试代码必须装有cj60lib界面扩展库 cj60lib的使用方法参看有关文档 不知道是不是我的cj60lib出问题
💻 CPP
字号:
// HelpList.cpp : implementation file
//

#include "stdafx.h"
#include "vchelper.h"
#include "HelpListview.h"
#include "vchelperdoc.h"
#include "mainfrm.h"
#include "addeditfile.h"
#include "finddlg.h"
#include "topicview.h"

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

/////////////////////////////////////////////////////////////////////////////
// CHelpListView

IMPLEMENT_DYNCREATE(CHelpListView, CCJListView)

CHelpListView::CHelpListView()
{
	m_pDataset=NULL;
	m_pctrl=NULL;
	m_str=_T("");
	m_strFil=_T("id=1");
	m_bSearch=false;
}

CHelpListView::~CHelpListView()
{
}


BEGIN_MESSAGE_MAP(CHelpListView, CCJListView)
	//{{AFX_MSG_MAP(CHelpListView)
	ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, OnItemchanged)
	ON_WM_CONTEXTMENU()
	ON_COMMAND(ID_DELETER_FILE, OnDeleterFile)
	ON_UPDATE_COMMAND_UI(ID_DELETER_FILE, OnUpdateDeleterFile)
	ON_COMMAND(ID_EDIT_FILE, OnEditFile)
	ON_COMMAND(ID_UP, OnUp)
	ON_COMMAND(ID_NEXT, OnNext)
	ON_WM_LBUTTONDBLCLK()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHelpListView drawing

static UINT nHeaderBmps[] =
{
	IDB_STAR,
	IDB_STAR
};

void CHelpListView::OnInitialUpdate() 
{
	CCJListView::OnInitialUpdate();

	m_pctrl=&GetListCtrl();

	//m_pctrl->ModifyStyle(0,LVS_EDITLABELS);
	m_pctrl->SetExtendedStyle(LVS_EX_FULLROWSELECT);
	m_pctrl->SetImageList(&theApp.m_imagelist,LVSIL_SMALL);

	
	CVchelperDoc* pDoc=GetDocument();
	m_pDataset=pDoc->m_pDataset;
	m_pCon=pDoc->m_pConnection;
	BuildColumns();
}

void CHelpListView::OnChange(CString str)
{
	INFRCD infrcd[100];
	m_pctrl->DeleteAllItems();
	if(m_pDataset->State==1)
		m_pDataset->Close();
	if(str!="")
	{
		m_strFil="("+str+") OR id=1";
	}
	CString strSql;
	strSql="SELECT * FROM datasTab WHERE "+m_strFil+" ORDER BY ID";
	m_pDataset->Open((_bstr_t)strSql,&(*m_pCon),adOpenForwardOnly,adLockOptimistic,adCmdText);
	m_pDataset->MoveFirst();
	m_pDataset->MoveNext();
	if(m_bSearch)
	{
		m_bSearch=false;
		if(m_pDataset->adoEOF)
		{
			MessageBox("在数据库中没找到符合条件的记录","提示信息",MB_OK|MB_ICONWARNING);
			return;
		}
	}

	while(!m_pDataset->adoEOF)
	{
		FormatList();
		m_pDataset->MoveNext();
	}
}

CString CHelpListView::GetPath(int id1,int id2)
{
	CMainFrame *pFrame = DYNAMIC_DOWNCAST(CMainFrame,AfxGetApp()->m_pMainWnd);
	CTopicView *pView=pFrame->GetTreeView();

	int max=pView->m_num;
	CString str1,str2;

	if(id2==0)  
	{
		for(int i=0;i<max;i++)
		{
			if(pView->infrcd[i].typeID2==0&&id1==pView->infrcd[i].typeID1)
			{
				str1="【"+pView->infrcd[i].strName+"】";
				return str1;
				break;
			}
		}
	}
	else
	{
		BOOL b1=false;
		BOOL b2=false;
		for(int i=0;i<max;i++)
		{
			if(!b1&&
				pView->infrcd[i].typeID2==0&&
				id1==pView->infrcd[i].typeID1)
			{
				b1=true;
				str1="【"+pView->infrcd[i].strName+"】";
			}
			if(!b2&&
				id1==pView->infrcd[i].typeID1&&
				id2==pView->infrcd[i].typeID2)
			{
				b2=true;
				str2="〖"+pView->infrcd[i].strName+"〗";
			}
			if(b1&&b2)
			{
				str1=str1+str2;
				return str1;
			}
		}
	}
	return _T("");
}

void CHelpListView::FormatList()
{
	CString str;
	LV_ITEM		lvi;
	int	nI = m_pctrl->GetItemCount();
	//精华
	lvi.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_STATE;
	lvi.iItem = nI;
	lvi.iSubItem = 0;
	lvi.iImage = m_pDataset->GetCollect("pride").intVal;
	lvi.stateMask = LVIS_STATEIMAGEMASK;
	lvi.state = INDEXTOSTATEIMAGEMASK(1);
	str.Format("%d",m_pDataset->GetCollect("pride").intVal);
	lvi.pszText = (char*)(LPCTSTR)str;
	m_pctrl->InsertItem(&lvi);
	//id
	str.Format("%d",m_pDataset->GetCollect("id").intVal);
	m_pctrl->SetItemText(nI,1,str);
	//标题
	str=m_pDataset->GetCollect("title").bstrVal;
	m_pctrl->SetItemText(nI,2,str);
	//路径
	str=GetPath(m_pDataset->GetCollect("typeid1").intVal,
				m_pDataset->GetCollect("typeid2").intVal);
	m_pctrl->SetItemText(nI,3,str);
	//例子
	if(m_pDataset->GetCollect("example").intVal==1) 
	{
		m_pctrl->SetItemText(nI,4,_T("有"));
	}
}

/////////////////////////////////////////////////////////////////////////////
// CHelpListView diagnostics

#ifdef _DEBUG
void CHelpListView::AssertValid() const
{
	CCJListView::AssertValid();
}

void CHelpListView::Dump(CDumpContext& dc) const
{
	CCJListView::Dump(dc);
}

CVchelperDoc* CHelpListView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CVchelperDoc)));
	return (CVchelperDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CHelpListView message handlers

BOOL CHelpListView::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	cs.style |= LVS_REPORT;
	return CCJListView::PreCreateWindow(cs);
}

void CHelpListView::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	CMainFrame *pFrame = DYNAMIC_DOWNCAST(CMainFrame,AfxGetApp()->m_pMainWnd);
	if( !pFrame )
	{
		return;
	}
	POSITION pos=m_pctrl->GetFirstSelectedItemPosition();
	if(pos==NULL)
		return;
	int nItem=m_pctrl->GetNextSelectedItem(pos);
	
	CString str=m_pctrl->GetItemText( nItem, 1 );
	if(m_str!=str)//防止排序的时候刷新导致迟缓
	{	
		if(m_pDataset->State==1)
			m_pDataset->Close();
		CString strSql;
		strSql="SELECT * FROM datasTab WHERE id="+str;
		m_pDataset->Open((_bstr_t)strSql,&(*m_pCon),adOpenForwardOnly,adLockOptimistic,adCmdText);
		m_pDataset->MoveFirst();

		strSql=m_pDataset->GetCollect("data").bstrVal;
		pFrame->GetEditView()->OnListChange(m_pctrl->GetItemText(nItem,2),strSql);
		m_str=str;
	}
	
	*pResult = 0;
}

void CHelpListView::BuildColumns()
{
	int nCols = 5;
	int nColSize[] = { 20,30,350,150,30 };
	CString strColText[] = { _T(""), _T("序号"), _T("标题"),_T("路径"),_T("例子")};

	// Insert the columns into the list control
	LV_COLUMN lvCol;

	lvCol.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
	for (int i = 0; i < nCols; ++i)
	{
		lvCol.iSubItem = i;
		lvCol.pszText = (char*)(LPCTSTR)strColText[i];
		lvCol.cx = nColSize[i];
		lvCol.fmt = LVCFMT_LEFT;
		m_pctrl->InsertColumn(i, &lvCol);
	}
}

void CHelpListView::OnContextMenu(CWnd* pWnd, CPoint point) 
{

	if (point.x == -1 && point.y == -1){
		//keystroke invocation
		CRect rect;
		GetClientRect(rect);
		ClientToScreen(rect);
		
		point = rect.TopLeft();
		point.Offset(5, 5);
	}
	
	CMenu menu;
	VERIFY(menu.LoadMenu(IDR_POPUP_LIST));
	
	CMenu* pPopup = menu.GetSubMenu(0);
	ASSERT(pPopup != NULL);
	CWnd* pWndPopupOwner = this;
	
	while (pWndPopupOwner->GetStyle() & WS_CHILD)
		pWndPopupOwner = pWndPopupOwner->GetParent();
	
	pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
		pWndPopupOwner);	
}

void CHelpListView::OnDeleterFile() 
{
	POSITION pos=m_pctrl->GetFirstSelectedItemPosition();
	if(pos==NULL)
		return;
	int nItem=m_pctrl->GetNextSelectedItem(pos);
	
	CString str;
	str="是否删除记录:  " + m_pctrl->GetItemText(nItem,2);
	if(AfxMessageBox(str,MB_YESNO|MB_ICONEXCLAMATION)!=IDYES) return;

	str=m_pctrl->GetItemText( nItem, 1 );
	str="DELETE FROM DatasTab WHERE id="+str;
	_variant_t v;
	v.Clear();
	m_pCon->Execute(_bstr_t(str),&v,adCmdText);
	OnChange();
	
	if(nItem>=m_pctrl->GetItemCount()) nItem--;
	if(nItem<0) nItem++;
	if(m_pctrl->GetItemCount()>nItem&&nItem>=0)
	{
		m_pctrl->SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED,
							LVIS_SELECTED|LVIS_FOCUSED);
	}
}

void CHelpListView::OnUpdateDeleterFile(CCmdUI* pCmdUI) 
{
	POSITION pos=m_pctrl->GetFirstSelectedItemPosition();
	if(pos==NULL)
		pCmdUI->Enable(FALSE);
	else
		pCmdUI->Enable();
}

void CHelpListView::OnUp() 
{
	POSITION pos=m_pctrl->GetFirstSelectedItemPosition();
	if(pos==NULL)
		return;
	int nItem=m_pctrl->GetNextSelectedItem(pos);
	m_pctrl->SetItemState(nItem,LVIS_FOCUSED,LVIS_SELECTED);
	if(nItem>0)
	{
		nItem=nItem-1;
	}
	m_pctrl->SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED,
							LVIS_SELECTED|LVIS_FOCUSED);
}

void CHelpListView::OnNext() 
{
	POSITION pos=m_pctrl->GetFirstSelectedItemPosition();
	if(pos==NULL)
		return;
	int nItem=m_pctrl->GetNextSelectedItem(pos);
	m_pctrl->SetItemState(nItem,0,LVIS_SELECTED);
	if(nItem<m_pctrl->GetItemCount()-1)
	{
		nItem=nItem+1;
	}
	m_pctrl->SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED,
							LVIS_SELECTED|LVIS_FOCUSED);
}

void CHelpListView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{	
	m_pctrl=&GetListCtrl();
	m_pctrl->DeleteAllItems();
}


void CHelpListView::OnEditFile() 
{
	CMainFrame *pFrame = DYNAMIC_DOWNCAST(CMainFrame,AfxGetApp()->m_pMainWnd);
	if( !pFrame )
	{
		return;
	}
	POSITION pos=m_pctrl->GetFirstSelectedItemPosition();
	if(pos==NULL)
		return;
	int nItem=m_pctrl->GetNextSelectedItem(pos);
	
	CString str=m_pctrl->GetItemText( nItem, 1 );
	if(m_pDataset->State==1)
		m_pDataset->Close();
	CString strSql;
	strSql="SELECT * FROM datasTab WHERE id="+str;
	m_pDataset->Open((_bstr_t)strSql,&(*m_pCon),adOpenForwardOnly,adLockOptimistic,adCmdText);
	m_pDataset->MoveFirst();

	CAddEditFile dlgFind;
	dlgFind.m_strTopic=m_pDataset->GetCollect("title").bstrVal;
	dlgFind.m_strData=m_pDataset->GetCollect("data").bstrVal;
	dlgFind.m_typeID1=m_pDataset->GetCollect("typeid1").intVal;
	dlgFind.m_typeID2=m_pDataset->GetCollect("typeid2").intVal;
	dlgFind.m_pride=m_pDataset->GetCollect("pride").intVal;
	dlgFind.m_exa=m_pDataset->GetCollect("example").intVal;
	dlgFind.m_frag=true;
	dlgFind.m_num=pFrame->GetTreeView()->m_num;
	for(int i=0;i<dlgFind.m_num;i++)
	{
		dlgFind.infrcd[i]=pFrame->GetTreeView()->infrcd[i];
	}
	if(dlgFind.DoModal()==IDOK)
	{
		try
		{
			m_pDataset->PutCollect("title",_variant_t(dlgFind.m_strTopic));
			m_pDataset->PutCollect("data",_variant_t(dlgFind.m_strData));
			m_pDataset->PutCollect("typeid1",_variant_t((long)dlgFind.m_typeID1));
			m_pDataset->PutCollect("typeid2",_variant_t((long)dlgFind.m_typeID2));
			m_pDataset->PutCollect("pride",_variant_t((long)dlgFind.m_pride));
			m_pDataset->PutCollect("example",_variant_t((long)dlgFind.m_exa));
			m_pDataset->Update();
		}
		catch(...)
		{
			MessageBox("保存修改结果失败!","提示信息",MB_OK|MB_ICONERROR);
		}
	}
	OnChange();
	if(m_pctrl->GetItemCount()>nItem&&nItem>=0)
	{
		m_pctrl->SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED,
							LVIS_SELECTED|LVIS_FOCUSED);
	}

	pFrame->GetEditView()->OnListChange(dlgFind.m_strTopic,dlgFind.m_strData);
}

void CHelpListView::OnAddFile()
{
	CMainFrame *pFrame = DYNAMIC_DOWNCAST(CMainFrame,AfxGetApp()->m_pMainWnd);
	if( !pFrame )
	{
		return;
	}

	if(m_pDataset->State==1)
		m_pDataset->Close();
	CAddEditFile dlgFind;
	if(!pFrame->GetTreeView()->Search(dlgFind.m_typeID1,dlgFind.m_typeID2))
	{
		dlgFind.m_typeID1=0;
		dlgFind.m_typeID2=0;
	}
	dlgFind.m_frag=false;
	dlgFind.m_num=pFrame->GetTreeView()->m_num;
	for(int i=0;i<dlgFind.m_num;i++)
	{
		dlgFind.infrcd[i]=pFrame->GetTreeView()->infrcd[i];
	}
	if(dlgFind.DoModal()==IDOK)
	{
		try
		{
			CString strSql;
			strSql="SELECT * FROM datasTab";
			m_pDataset->Open((_bstr_t)strSql,&(*m_pCon),adOpenForwardOnly,adLockOptimistic,adCmdText);

			m_pDataset->AddNew();
			m_pDataset->PutCollect("title",_variant_t(dlgFind.m_strTopic));
			m_pDataset->PutCollect("data",_variant_t(dlgFind.m_strData));
			m_pDataset->PutCollect("typeid1",_variant_t((long)dlgFind.m_typeID1));
			m_pDataset->PutCollect("typeid2",_variant_t((long)dlgFind.m_typeID2));
			m_pDataset->PutCollect("pride",_variant_t((long)dlgFind.m_pride));
			m_pDataset->PutCollect("example",_variant_t((long)dlgFind.m_exa));
			m_pDataset->Update();
		}
		catch(...)
		{
			MessageBox("添加记录失败!","提示信息",MB_OK|MB_ICONERROR);
			return;
		}
	}
	OnChange();
}

void CHelpListView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	OnEditFile();
	CCJListView::OnLButtonDblClk(nFlags, point);
}

void CHelpListView::Find()
{
	CMainFrame *pFrame = DYNAMIC_DOWNCAST(CMainFrame,AfxGetApp()->m_pMainWnd);
	if( !pFrame )
	{
		return;
	}

	CFindDlg dlgFind;
	dlgFind.m_num=pFrame->GetTreeView()->m_num;
	for(int i=0;i<dlgFind.m_num;i++)
	{
		dlgFind.infrcd[i]=pFrame->GetTreeView()->infrcd[i];
	}
	if(dlgFind.DoModal()==IDOK)
	{
		CString temp="'%"+dlgFind.m_strFind+"%'";
		switch(dlgFind.m_ran)
		{
		case 0:
			temp="title like "+temp+" or data like "+temp;
			break;
		case 1:
			temp="title like "+temp;
			break;
		case 2:
			temp="data like "+temp;
			break;
		}

		if(dlgFind.m_type>0)
		{
			CString id;
			id.Format("%d",dlgFind.m_type);
			temp="("+temp+") and typeid1 = "+id;
		}
		temp="id=1 or ("+temp+")";
		m_strFil=temp;
		m_bSearch=true;
		OnChange();
	}
}

⌨️ 快捷键说明

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