Top1.cpp
上传用户:szcysw
上传日期:2013-03-11
资源大小:6752k
文件大小:10k
- // Top.cpp : implementation file
- //
- #include "stdafx.h"
- #include "resource.h"
- #include "Top1.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CTop
- #include "ProgressBar.h"
- IMPLEMENT_DYNCREATE(CTop, CListView)
- CTop::CTop()
- {
- Detail_old="";
- IsFuzzyFind=0;
-
- TCHAR s[MAX_PATH];
- GetModuleFileName(NULL,s,MAX_PATH);
-
- TCHAR szDir[MAX_PATH];
- TCHAR szDrv[MAX_PATH];
- _splitpath(s,szDrv,szDir,NULL,NULL);
-
- htmlpath=(CString)szDrv+(CString)szDir;
- htmlpath+="kingdom\";
-
- //建立临时目录
- if(!CreateDirectory((LPSTR)(LPCSTR)htmlpath,0))
- MessageBox("上次未正常关闭此程序!","提示",MB_ICONEXCLAMATION|MB_OK);
-
- }
- CTop::~CTop()
- {
- //退出程序时清空临时目录下的所有文件
- DeleteTree(htmlpath);
- }
- BEGIN_MESSAGE_MAP(CTop, CListView)
- //{{AFX_MSG_MAP(CTop)
- ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, OnItemchanged)
- ON_WM_LBUTTONDOWN()
- //}}AFX_MSG_MAP
- ON_MESSAGE(WM_RECONSTRUCT,ReconstructListView)
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CTop drawing
- void CTop::OnDraw(CDC* pDC)
- {
- CDocument* pDoc = GetDocument();
- }
- /////////////////////////////////////////////////////////////////////////////
- // CTop diagnostics
- #ifdef _DEBUG
- void CTop::AssertValid() const
- {
- CListView::AssertValid();
- }
- void CTop::Dump(CDumpContext& dc) const
- {
- CListView::Dump(dc);
- }
- #endif //_DEBUG
- /////////////////////////////////////////////////////////////////////////////
- // CTop message handlers
- #include "TaxExpertDoc.h"
- void CTop::OnInitialUpdate()
- {
- //在列表视图中添加字段(列表项标题)
- CListView::OnInitialUpdate();
- CListCtrl& ListCtrl = GetListCtrl();
- ListCtrl.InsertColumn(0, _T(" 文号"), LVCFMT_LEFT);
- ListCtrl.InsertColumn(1, _T(" 文件名称"), LVCFMT_LEFT);
- ListCtrl.InsertColumn(2, _T(" 文件种类"), LVCFMT_LEFT);
- ListCtrl.InsertColumn(3, _T(" 发布时间"), LVCFMT_LEFT);
- ListCtrl.InsertColumn(4, _T(" 索引值"), LVCFMT_LEFT);
- int i=0;
- CTaxExpertDoc * pDOC=(CTaxExpertDoc *)GetDocument();
- //在加入记录时,不进行重绘
- ListCtrl.SetRedraw(0);
- pDOC->m_pSet->MoveFirst();
- for( i=0;i<50;i++)
- {
- //添加50条空记录
- ListCtrl.InsertItem(i,"NULL");
- }
- CString filter="[content] like'*税*'";
- //数据集是保存在CTaxExpertDoc中的
- pDOC->m_pSet->m_strFilter=filter;
- //使用pub_time字段进行降序排序
- pDOC->m_pSet->m_strSort="pub_time DESC";
- pDOC->m_pSet->Requery();
- pDOC->m_pSet->MoveFirst();
- CString num;
- int k;
-
- for( i=0;i<50;i++)
- {
- ListCtrl.SetItemText(i,0,pDOC->m_pSet->m_file_num);
- ListCtrl.SetItemText(i,1,pDOC->m_pSet->m_fileName);
- ListCtrl.SetItemText(i,2,pDOC->m_pSet->m_cata);
- ListCtrl.SetItemText(i,3,pDOC->m_pSet->m_pub_time);
- //将顺序号转换成字符串
- k=pDOC->m_pSet->m_num;
- num.Format("%d",k);
- ListCtrl.SetItemText(i,4,num);
- pDOC->m_pSet->MoveNext();
- }
-
- for( i=0;i<4;i++)
- {
- //分别设置列表宽度
- ListCtrl.SetColumnWidth(i, 200);
- }
- //设置第一列宽度
- ListCtrl.SetColumnWidth(1, 400);
- //进行重绘
- ListCtrl.SetRedraw(1);
- }
- BOOL CTop::PreCreateWindow(CREATESTRUCT& cs)
- {
- //设定LISTVIEW的风格--LVS_SINGLESEL单选
- cs.style|=WS_HSCROLL|WS_VSCROLL|LVS_SINGLESEL|LVS_REPORT;
- return CListView::PreCreateWindow(cs);
- }
- void CTop::OnLButtonDown(UINT nFlags, CPoint point)
- {
- //启用整行全选功能
- SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0,LVS_EX_FULLROWSELECT ) ;
- CListView::OnLButtonDown(nFlags, point);
- }
- /*WM_RECONSTRUCT消息的响应函数
- 功能:更新文件列表的内容,然后按Query_Mode(查询方式)
- LPARAM detail(税种)来重新定制列表框的内容
- */
- void CTop::ReconstructListView(WPARAM Query_Mode,LPARAM detail)
- {
- IsFuzzyFind=0;
- //将关键词数据清空
- for(int kk=0;kk<100;kk++)
- KeyWord[kk].Empty();
-
- CString detail_dsc((LPCSTR)detail);
- //所进行的查询并未有变化,不用再查
- if((detail_dsc==Detail_old))
- return;
- //Detail_old记录每次查询的内容
- Detail_old=detail_dsc;
- //得到视图的列表框控件
- CListCtrl& ListCtrl = GetListCtrl();
-
- BeginWaitCursor();
- //清空列表框的列表项
- if(!(ListCtrl.DeleteAllItems()))
- return;
-
- //根据detail_dsc内容在数据库中进行模糊查询
- CTaxExpertDoc * pDOC=(CTaxExpertDoc *)GetDocument();
-
- //设置过滤条件
- CString filter="[cata] like ";
- detail_dsc="'*"+detail_dsc+"*'";
- filter+=detail_dsc;
- //如果进行的是模糊查询,清空临时目录下的所有文件
- if(Query_Mode==ID_FUZZY_FIND)
- {
- DeleteTree(htmlpath+"*.*");
- IsFuzzyFind=1;
- filter=(LPCSTR)detail;
- CString sk=filter;
- //将关键词存入数组,在便在显示时设置关键词格式
- sk.Replace("AND content like'*","");
- sk.Replace("content like'*","");
- int find=0;
- int pos=0;
- int pos2=0;
- for(int i=0;i<100;i++)
- {
- pos=sk.Find("*'");
- if(pos==-1)
- i=100;
- else
- {
- KeyWord[i]=sk.Mid(0,pos);
- sk=sk.Mid(pos+2);
- find+=1;
- }
- }
- }
- else
- IsFuzzyFind=0;
-
- pDOC->m_pSet->m_strFilter=filter;
- //按发文时间排序
- pDOC->m_pSet->m_strSort="pub_time DESC";
- //进行数据查询
- pDOC->m_pSet->Requery();
- long int iFound=pDOC->m_pSet->GetRecordCount();
-
- if(iFound==0)
- {
- MessageBox("请确认你下以下几方面是否正确rnrn
- 1.输入的内容是否正确? 请缩小查询范围!rnrn
- 2.多级查询中的加号是不是半角字符?",
- "查询提示:未找到查询结果",MB_ICONQUESTION|MB_OK );
- pDOC->m_pSet->m_strFilter="";
- pDOC->m_pSet->Requery();
- return ;
- }
-
- //状态栏上显示查询进度条
- CProgressBar ProgressBar(_T("正在准备数据"), 30, 10000,1);
- ProgressBar.SetRange(0,iFound);
-
- pDOC->m_pSet->MoveLast();
- iFound=pDOC->m_pSet->GetRecordCount();
- pDOC->m_pSet->MoveFirst();
- CString item[5];
- CString num;
- int k;
- CDaoSF * Set=pDOC->m_pSet;
- pDOC->m_pSet->MoveFirst();
- //根据检索结果在列表框中新增记录
- ListCtrl.SetRedraw(0);
- for(int i=0;i<iFound;i++)
- {
- item[0]=Set->m_file_num;
- item[1]=Set->m_fileName;
- item[2]=Set->m_cata;
- item[3]=Set->m_pub_time;
- k=Set->m_num;
- num.Format("%d",k);
- item[4]=num;
- ListCtrl.InsertItem(i,item[0]);
-
- for( int j=1;j<5;j++)
- { //设置各列表项的内容
- ListCtrl.SetItemText(i,j,item[j]);
- }
- //设置状态栏上的进度条的进度
- ProgressBar.SetPos(i*2);
- pDOC->m_pSet->MoveNext();
- }
- EndWaitCursor();
-
- //重绘列表框的列表项
- ListCtrl.SetRedraw(1);
- }
- /*DynaCrateHtml:在临时目录中创建一HTML文件
- fileindex:文件索引号
- content:文件内容
- title:文件标题
- 返回值:创建完成的HTML文件名(索引号.DAT)
- */
- #include "resource.h"
- CString CTop::DynaCrateHtml(CString fileindex,CString content,CString title)
- {
- CString Header,tail,body,aftertile;
- //格式化的HTTML文件头及文件尾
- //IDS_BANNER:预定义的HTML文件头格式
- Header.LoadString(IDS_BANNER);
- //文件结束时的红线
- tail="<hr color="#FF0000">";
- tail+="<p align="center"><span
- style="font-size: 9pt">税务师欢迎你</span></p>";
- Header+=title;
- //标题后的红线条
- aftertile.LoadString(IDS_BANNERAFTERTILE);
- Header+=aftertile;
- CFile tempFile;
- CString filename=htmlpath+fileindex+".dat";
- //如果文件已经存在,不用创建
- if(IsFileExist(filename))
- {
- return filename;
- }
- else
- {
- tempFile.Open(filename,CFile::modeCreate|CFile::modeReadWrite);
- content.TrimLeft();
- content.TrimRight();
- if(content.IsEmpty())
- content="空记录,无内容";
- //将字符串转换中的回转换行转换成HTML中的“回车”
- content.Replace("rn","<br>" );
- //如果进行的是全文模糊查询,将所有关键词用红色标记出来
- if(IsFuzzyFind)
- {
- CString newformat;
- for(int i=0;i<100;i++)
- {
- KeyWord[i].TrimLeft();
- KeyWord[i].TrimRight();
- if(KeyWord[i].IsEmpty())
- i=100;
- else
- {
- newformat="<font color="#FF0000">";
- newformat+=KeyWord[i];
- newformat+="</font>";
- content.Replace(KeyWord[i],newformat);
- }
- }
- }
- body=Header+content+tail;
- tempFile.Write(body,body.GetLength());
- tempFile.Close();
- return filename;
- }
- }
- /*
- 列表框选择的内容变化时的响应函数,当选择发生变动时
- 1、根据当前列表项所记录的文件索引值在数据库中定位数据
- 2、根据当前m_content字段的内容在临时目录下生成
- 一个HTML文件,以文号作为文件标题
- 3、通过父窗口通知CContainerView进行HTML文件的显示
- */
- #include "MainFrm.h"
- #include "TaxExpertView.h"
- void CTop::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
- {
- HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
- *pResult = 0;
- CTaxExpertDoc * pDOC=(CTaxExpertDoc *)GetDocument();
- int num=pDOC->m_pSet->m_num;
- CString tempname;
- int i=GetListCtrl().GetNextItem(-1,LVNI_SELECTED);
- //得到当前选项
- if(i>-1)
- {
- //得到所选文件的文号
- tempname=GetListCtrl().GetItemText(i,4);
- CFile tempFile;
- CString filename=htmlpath+"/"+tempname+".html";
- CString url=filename;
- //如果临时目录下没有该文件,新建一个
- if(!IsFileExist(filename))
- {
- CString filter="[num]="+tempname;
- pDOC->m_pSet->m_strFilter=filter;
- //重新检索
- pDOC->m_pSet->Requery();
- //构造红头文件:标题+换行+文号
- CString Title=pDOC->m_pSet->m_fileName;
- Title+="<br>";
- Title+=pDOC->m_pSet->m_file_num;
- //创建HTML文件
- url=DynaCrateHtml(tempname,pDOC->m_pSet->m_content,Title);
- }
- //通知父窗口,让CContainerView显示url文件
- ::SendMessage(AfxGetMainWnd()->m_hWnd,
- WM_INTERACTIVE_WITH_FRAME,ID_FROM_LIST,(WPARAM)(LPCSTR)url);
- }
- }
- //删除指定位置的文件或目录
- void CTop::DeleteTree(CString szBeDeletePath)
- {
- SHFILEOPSTRUCT sf = {0};
- sf.wFunc = FO_DELETE;
- if(szBeDeletePath.Find("*")==-1)//删目录
- szBeDeletePath.SetAt(szBeDeletePath.GetLength()-1,0);
- else//删文件
- szBeDeletePath.SetAt(szBeDeletePath.GetLength()+1,0);
- sf.pFrom = szBeDeletePath;
- sf.fFlags = FOF_NOERRORUI |FOF_SILENT|FOF_NOCONFIRMATION ;
- SHFileOperation(&sf);
- }
- //判断strFileName文件是否存在
- BOOL CTop::IsFileExist(CString strFileName)
- {
- CFileStatus sta;
- CFile tempFile;
- BOOL IsExist=tempFile.GetStatus(strFileName,sta);
- return IsExist;
- }