📄 helplist.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 + -