📄 dummylist.cpp
字号:
// DummyList.cpp : implementation file
//
#include "stdafx.h"
#include "GetLink.h"
#include "DummyList.h"
#include "GetList.h"
#include "GetLinkDoc.h"
#include "FileSet.h"
#include "MainFrm.h"
#include "AdrCtrlView.h"
#include "SortClass.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDummyList
IMPLEMENT_DYNCREATE(CDummyList, CView)
CDummyList::CDummyList()
{
m_Sort=TRUE;
item_Ctrl=-1;
}
CDummyList::~CDummyList()
{
}
BEGIN_MESSAGE_MAP(CDummyList, CView)
//{{AFX_MSG_MAP(CDummyList)
ON_WM_CREATE()
ON_NOTIFY(NM_CLICK, IDC_GET_LIST, OnClickList1)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_GET_LIST, OnItemclickList1)
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDummyList drawing
void CDummyList::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CDummyList diagnostics
#ifdef _DEBUG
void CDummyList::AssertValid() const
{
CView::AssertValid();
}
void CDummyList::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDummyList message handlers
void CDummyList::OnInitialUpdate()
{
CView::OnInitialUpdate();
CGetLinkDoc *pDoc=(CGetLinkDoc *)GetDocument();
pDoc->set.Open("GetLink.dat");
CString str;
int i=0;
while(!pDoc->set.IsEOF())
{
str.Format("%03d",pDoc->set.NO);
m_ctrGetList.InsertItem(i,str);
m_ctrGetList.SetItemText(i,0,str);
m_ctrGetList.SetItemText(i,1,pDoc->set.Name);
m_ctrGetList.SetItemText(i,2,pDoc->set.Type1);
m_ctrGetList.SetItemText(i,3,pDoc->set.Type2);
m_ctrGetList.SetItemText(i,4,pDoc->set.Type3);
m_ctrGetList.SetItemText(i,5,pDoc->set.Mark);
pDoc->set.MoveNext();
i++;
}
pDoc->iTotal = i;
pDoc->iItem=-1;//设初始LIST控件位置为空,避免滚到LIST控件最后一行
// TODO: Add your specialized code here and/or call the base class
}
int CDummyList::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
m_ctrGetList.Create(
LVS_REPORT | WS_VISIBLE | WS_CHILD,
CRect( 0, 0 , 830, 250),
this, IDC_GET_LIST);
m_ctrGetList.SetTextColor(RGB(255,255,255));
m_ctrGetList.SetTextBkColor(RGB(69,83,103));
m_ctrGetList.SetBkColor(RGB(69,83,103));
m_ctrGetList.InsertColumn(0,"排名",LVCFMT_LEFT,45);
m_ctrGetList.InsertColumn(1,"地址",LVCFMT_CENTER,250);
m_ctrGetList.InsertColumn(2,"大类别",LVCFMT_CENTER,80);
m_ctrGetList.InsertColumn(3,"小类别1",LVCFMT_CENTER,80);
m_ctrGetList.InsertColumn(4,"小类别2",LVCFMT_CENTER,80);
m_ctrGetList.InsertColumn(5,"简评",LVCFMT_CENTER,290);
// Set Extended style.
m_ctrGetList.SetExtendedStyle(
LVS_EX_FULLROWSELECT | LVS_EX_ONECLICKACTIVATE |
LVS_EX_UNDERLINEHOT |
LVS_EX_INFOTIP |
LVS_EX_FLATSB |
LVS_EX_GRIDLINES |
LVS_EX_CHECKBOXES |
~LVS_NOSCROLL //设置卷动风格
);
return 0;
}
BOOL CDummyList::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
cs.style |= (LVS_SHOWSELALWAYS | LVS_REPORT |
/*LVS_SINGLESEL | */LVS_NOSORTHEADER);
return CView::PreCreateWindow(cs);
}
void CDummyList::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
{
// TODO: Add your specialized code here and/or call the base class
CView::OnActivateView(bActivate, pActivateView, pDeactiveView);
}
void CDummyList::DoSelect(CString filter)
{
if(filter!="")
{
CGetLinkDoc *pDoc=(CGetLinkDoc *)GetDocument();
CString str;
int i=0;
m_ctrGetList.DeleteAllItems();
pDoc->set.MoveFirst();
while(!pDoc->set.IsEOF())
{
if(pDoc->set.Type1==filter||pDoc->set.Type2==filter||pDoc->set.Type3==filter)
{
str.Format("%03d",pDoc->set.NO);
m_ctrGetList.InsertItem(i,str);
m_ctrGetList.SetItemText(i,0,str);
m_ctrGetList.SetItemText(i,1,pDoc->set.Name);
m_ctrGetList.SetItemText(i,2,pDoc->set.Type1);
m_ctrGetList.SetItemText(i,3,pDoc->set.Type2);
m_ctrGetList.SetItemText(i,4,pDoc->set.Type3);
m_ctrGetList.SetItemText(i,5,pDoc->set.Mark);
i++;
}
pDoc->set.MoveNext();
}
pDoc->iTotal = i;
pDoc->iItem=-1;//设初始LIST控件位置为空,避免滚到LIST控件最后一行
}
}
void CDummyList::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
//以下采用的是方法1.由视图处理控件Notify消息的方法,
//另方法2. 消息反射见MSDN技巧62
//方法3.重载自己的控件类进行子类化
//方法4.在视图类中用OnCmdMsg进行消息重定向 见编程实例221和Processmgr
// TODO: Add your control notification handler code here
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int iItem = pNMListView->iItem;
item_Ctrl=iItem;//控件中选中行数
CGetLinkDoc *pDoc=(CGetLinkDoc *)GetDocument();
if (!pDoc->OnUpdate) //更新完毕才允许重选中
{
if (iItem>=0)
{
pDoc->m_nNO = atoi(LPCTSTR(m_ctrGetList.GetItemText(iItem,0)));
pDoc->m_strName = m_ctrGetList.GetItemText(iItem,1);
pDoc->m_Type1 = m_ctrGetList.GetItemText(iItem,2);
pDoc->m_Type2 = m_ctrGetList.GetItemText(iItem,3);
pDoc->m_Type3 = m_ctrGetList.GetItemText(iItem,4);
pDoc->m_Mark = m_ctrGetList.GetItemText(iItem,5);
}
else
{
pDoc->m_nNO = 0;
pDoc->m_strName = _T("");
pDoc->m_Type1 = _T("");
pDoc->m_Type2 = _T("");
pDoc->m_Type3 = _T("");
pDoc->m_Mark = _T("");
}
//通知CADRCTRALVIEW更新
if(pDoc->m_ViewType=="CAdrCtrlView")
{
CMainFrame* pMainFrame =(CMainFrame*)AfxGetApp()->m_pMainWnd;
CAdrCtrlView* AdrView=(CAdrCtrlView*)pMainFrame->m_wndSplitter3.GetPane(0,1);
AdrView->MyUpdate(); //调用显示视图更新函数
}
}
CString name=m_ctrGetList.GetItemText(iItem,1);
if(name!="")
pDoc->iItem=pDoc->set.FindItem(name); //根据LIST控件地址字段名查找记录号
*pResult = 0;
}
void CDummyList::MyUpdate()
{
CGetLinkDoc *pDoc=(CGetLinkDoc *)GetDocument();
if(pDoc->m_Act=="添加")
{
CString str;
str.Format("%03d",pDoc->set.NO);
m_ctrGetList.InsertItem(pDoc->iTotal,str);
m_ctrGetList.SetItemText(pDoc->iTotal,0,str);
m_ctrGetList.SetItemText(pDoc->iTotal,1,pDoc->set.Name);
m_ctrGetList.SetItemText(pDoc->iTotal,2,pDoc->set.Type1);
m_ctrGetList.SetItemText(pDoc->iTotal,3,pDoc->set.Type2);
m_ctrGetList.SetItemText(pDoc->iTotal,4,pDoc->set.Type3);
m_ctrGetList.SetItemText(pDoc->iTotal,5,pDoc->set.Mark);
m_ctrGetList.EnsureVisible(pDoc->iTotal,0);
//m_ctrGetList.EnsureVisible(0,1);
pDoc->iTotal++;
//m_ctrGetList.m_nCount=pDoc->iTotal;
pDoc->m_Act=="";
}
if(pDoc->m_Act=="删除")
{
m_ctrGetList.DeleteItem(item_Ctrl);
pDoc->iItem=-1;
pDoc->iTotal--; //更新控件LIST最大记录数目
pDoc->m_Act=="";
}
if(pDoc->m_Act=="修改")
{
CString str;
str.Format("%03d",pDoc->set.NO);
m_ctrGetList.SetItemText(item_Ctrl,0,str);
m_ctrGetList.SetItemText(item_Ctrl,1,pDoc->set.Name);
m_ctrGetList.SetItemText(item_Ctrl,2,pDoc->set.Type1);
m_ctrGetList.SetItemText(item_Ctrl,3,pDoc->set.Type2);
m_ctrGetList.SetItemText(item_Ctrl,4,pDoc->set.Type3);
m_ctrGetList.SetItemText(item_Ctrl,5,pDoc->set.Mark);
pDoc->m_Act=="";
}
}
void CDummyList::OnItemclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
// TODO: Add your control notification handler code here
// bAscending will be use to order from lower to higher or higher to lower
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
bool b_IsNumber;
if(pNMListView->iItem==0)
b_IsNumber =TRUE;
else
b_IsNumber =FALSE;
CSortClass csc(&(this->m_ctrGetList), pNMListView->iSubItem, b_IsNumber);
m_Sort=!m_Sort;//升序或降序
csc.Sort(m_Sort);
*pResult = 0;
}
void CDummyList::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect rcOutput;
GetClientRect(&rcOutput);
m_ctrGetList.MoveWindow(rcOutput);//使LISTCRTL控件布满整个视图
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -