Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовой проект / Kyrsovik / DBKino_Last_Release / DBKinoView
.cpp// DBKinoView.cpp : implementation of the CDBKinoView class
//
#include "stdafx.h"
#include "DBKino.h"
#include "DBKinoDoc.h"
#include "DBKinoView.h"
#include "EditFilm.h"
#include "FindFilm.h"
#include "CFilm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CDBKinoView
IMPLEMENT_DYNCREATE(CDBKinoView, CListView)
BEGIN_MESSAGE_MAP(CDBKinoView, CListView)
ON_COMMAND(ID_VIEW_FILM, OnViewFilm)
ON_COMMAND(ID_EDIT_ADD_FILM, OnEditAddFilm)
ON_COMMAND(ID_EDIT_DEL_FILM, OnEditDelFilm)
ON_COMMAND(ID_EDIT_EDIT_FILM, OnEditEditFilm)
ON_COMMAND(ID_EDIT_FIND_FILM, OnEditFindFilm)
END_MESSAGE_MAP()
// CDBKinoView construction/destruction
CDBKinoView::CDBKinoView()
{
m_dwDefaultStyle |= ( LVS_REPORT );
}
CDBKinoView::~CDBKinoView()
{
POSITION pos = pDoc -> cMapFilm.GetStartPosition();
while(pos != NULL)
{
void* ptr;
CString _FilmName_;
CFilm* film;
pDoc -> cMapFilm.GetNextAssoc(pos, _FilmName_, ptr);
film = ((CFilm*) ptr);
delete film;
}
pDoc -> cMapFilm.RemoveAll();
}
BOOL CDBKinoView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CListView::PreCreateWindow(cs);
}
void CDBKinoView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
pDoc = GetDocument();
pmyListCtrl = &GetListCtrl();
/* COLORREF crBkColor = ::GetSysColor(COLOR_ACTIVEBORDER);
pmyListCtrl->SetTextBkColor(crBkColor);
ASSERT(pmyListCtrl->GetTextBkColor() == crBkColor);*/
DWORD ExStyle = pmyListCtrl->GetExtendedStyle();
ExStyle |= LVS_EX_FULLROWSELECT;
pmyListCtrl->SetExtendedStyle(ExStyle);
ColumnCount = 0;
}
// CDBKinoView diagnostics
#ifdef _DEBUG
void CDBKinoView::AssertValid() const
{
CListView::AssertValid();
}
void CDBKinoView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
CDBKinoDoc* CDBKinoView::GetDocument() const // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDBKinoDoc)));
return (CDBKinoDoc*)m_pDocument;
}
#endif //_DEBUG
// CDBKinoView message handlers
void CDBKinoView::OnViewFilm()
{
pmyListCtrl -> DeleteAllItems();
for(int Col=ColumnCount; Col>=0; Col-- )
{
pmyListCtrl ->DeleteColumn (Col);
}
ShowFilmColumn();
if( (pDoc -> cMapFilm.GetSize()) == 0 )
{
CFilm* film = new CFilm();
CMapStringToPtr* ptrMap = &(pDoc->cMapFilm);
film->GetFilmInfo(ptrMap);
delete film;
}
POSITION p = pDoc -> cMapFilm.GetStartPosition();
CString sFilmName;
void *ptr;
int i = 0, j=1;
CFilm* Film;
while(p)
{
pDoc -> cMapFilm.GetNextAssoc(p, sFilmName, ptr);
Film = ((CFilm *)ptr);
pmyListCtrl->InsertItem(
LVIF_TEXT|LVIF_STATE, i, Film->s_FilmName,
// (i%2)==0 ? LVIS_SELECTED :
0,
LVIS_SELECTED,
0, 0);
{
pmyListCtrl->SetItemText(i, 1, Film->s_WorkFilm);
pmyListCtrl->SetItemText(i, 2, Film->s_Regiessiuer);
pmyListCtrl->SetItemText(i, 3, Film->s_Genre);
}
i ++ ;
Film = 0;
// delete film;
}
}
void CDBKinoView::OnEditAddFilm()
{
EditFilm edit;
edit.SetDocument(pDoc);
edit.DoModal();
OnViewFilm();
}
void CDBKinoView::OnEditDelFilm()
{
UINT uSelectedCount = pmyListCtrl->GetSelectedCount();
int nItem = -1;
int* itemCount = new int [uSelectedCount];
UINT i=0;
CFilm film;
if (uSelectedCount > 0)
{
for (i=0;i < uSelectedCount;i++)
{
nItem = pmyListCtrl->GetNextItem(nItem, LVNI_SELECTED);
ASSERT(nItem != -1);
itemCount[i] = nItem;
CString Str = pmyListCtrl->GetItemText(nItem, 0);
film.DelFilmInfo((&(pDoc->cMapFilm)), Str);
pmyListCtrl->Update(nItem);
}
for (i=0;i < uSelectedCount;i++)
{
pmyListCtrl->DeleteItem( itemCount[i] ); //Только так !
for(UINT j=i+1; j<(uSelectedCount); j++)
{ if(j==uSelectedCount){break;}itemCount[j]--; }
// pmyListCtrl->Update( itemCount[i] );
}
}
delete [] itemCount ;
}
void CDBKinoView::ShowFilmColumn()
{
LV_COLUMN lvc;
lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH;
lvc.iSubItem = 0;
lvc.pszText = _T("Фильм");
lvc.cx = 170;
GetListCtrl().InsertColumn(0,&lvc);
ColumnCount++;
lvc.iSubItem = 1;
lvc.pszText = _T("Производство");
lvc.cx = 125;
GetListCtrl().InsertColumn(1,&lvc);
ColumnCount++;
lvc.iSubItem = 2;
lvc.pszText = _T("Режиссёр");
lvc.cx = 140;
GetListCtrl().InsertColumn(2,&lvc);
ColumnCount++;
lvc.iSubItem = 3;
lvc.pszText = _T("Жанр");
lvc.cx = 110;
GetListCtrl().InsertColumn(3,&lvc);
ColumnCount++;
}
void CDBKinoView::OnEditEditFilm()
{
UINT uSelectedCount = pmyListCtrl->GetSelectedCount();
int nItem = -1;
UINT i=0;
if (uSelectedCount > 0)
{
nItem = pmyListCtrl->GetNextItem(nItem, LVNI_SELECTED);
ASSERT(nItem != -1);
CString Str = pmyListCtrl->GetItemText(nItem, 0);
EditFilm edit;
edit.SetDocument(pDoc, Str);
edit.DoModal();
OnViewFilm();
// pmyListCtrl->Update(nItem);
}
}
void CDBKinoView::OnEditFindFilm()
{
sFindFilm = new CString();
FindFilm find;
find.SetFindInfo( sFindFilm );
find.DoModal();
BOOL flag = 0;
int nItem = 0;
UINT ITEM = pmyListCtrl ->GetItemCount();
for(int i = ITEM; i >= 0; i--)
{
nItem = pmyListCtrl ->GetNextItem(nItem, LVNI_ALL );
CString Str = pmyListCtrl->GetItemText(nItem, 0);
if( (Str) == *sFindFilm )
{
pmyListCtrl->SetItem(nItem, 0, LVIF_STATE, NULL, 0,
LVIS_SELECTED, LVIS_SELECTED, 0);
pmyListCtrl->EnsureVisible(nItem,TRUE);
break;
}
}
delete sFindFilm;
}
Соседние файлы в папке DBKino_Last_Release