home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
msdn_vcb
/
samples
/
vc98
/
mfc
/
advanced
/
collect
/
strlstvw.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-03-26
|
5KB
|
212 lines
// strlstvw.cpp : implementation file
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#include "stdafx.h"
#include "collect.h"
#include "colledoc.h"
#include "strlstvw.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CStringListView
IMPLEMENT_DYNCREATE(CStringListView, CFormView)
CStringListView::CStringListView()
: CFormView(CStringListView::IDD)
{
//{{AFX_DATA_INIT(CStringListView)
m_strElement = "";
//}}AFX_DATA_INIT
}
CStringListView::~CStringListView()
{
}
void CStringListView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// Copy all of the strings from the document's CStringList
// to the listbox.
m_ctlList.ResetContent();
CStringList& stringList = GetDocument()->m_stringList;
POSITION pos = stringList.GetHeadPosition();
while (pos != NULL)
{
CString str = stringList.GetNext(pos);
m_ctlList.AddString(str);
}
}
void CStringListView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CStringListView)
DDX_Control(pDX, IDC_LIST, m_ctlList);
DDX_Text(pDX, IDC_ELEMENT, m_strElement);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CStringListView, CFormView)
//{{AFX_MSG_MAP(CStringListView)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_REMOVE, OnRemove)
ON_BN_CLICKED(IDC_REMOVE_ALL, OnRemoveAll)
ON_BN_CLICKED(IDC_UPDATE, OnUpdateElement)
ON_LBN_SELCHANGE(IDC_LIST, OnSelChangeList)
ON_BN_CLICKED(IDC_INSERT_BEFORE, OnInsertBefore)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStringListView diagnostics
#ifdef _DEBUG
void CStringListView::AssertValid() const
{
CFormView::AssertValid();
}
void CStringListView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CCollectDoc* CStringListView::GetDocument() // non-debug version is inline
{
return STATIC_DOWNCAST(CCollectDoc, m_pDocument);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CStringListView internal implementation
BOOL CStringListView::FindString(int& nSel, POSITION& pos)
{
nSel = m_ctlList.GetCurSel();
if (nSel == LB_ERR)
{
AfxMessageBox(IDS_SELECT_STRING_FIRST);
return FALSE;
}
// The currently selected string in the listbox is the string
// to be updated or removed .
CString strOld;
m_ctlList.GetText(nSel, strOld);
// Find the string to be updated or replaced in the CStringList.
CStringList& stringList = GetDocument()->m_stringList;
pos = stringList.Find(strOld);
// If the string is in the listbox, it should also be in the
// CStringList.
ASSERT(pos != NULL);
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CStringListView message handlers
void CStringListView::OnAdd()
{
if (UpdateData() != TRUE)
return;
// Add new string to the CStringList
GetDocument()->m_stringList.AddTail(m_strElement);
// Add new string to the listbox.
m_ctlList.AddString(m_strElement);
}
void CStringListView::OnInsertBefore()
{
if (UpdateData() != TRUE)
return;
int nSel;
POSITION pos;
// Find the string in both the CStringList and in the listbox.
if (FindString(nSel, pos) != TRUE)
return;
// Insert in front of the string found in the CStringList
GetDocument()->m_stringList.InsertBefore(pos, m_strElement);
// Insert new string in the listbox
m_ctlList.InsertString(nSel, m_strElement);
}
void CStringListView::OnUpdateElement()
{
if (UpdateData() != TRUE)
return;
int nSel;
POSITION pos;
// Find the string in both the CStringList and in the listbox.
if (FindString(nSel, pos) != TRUE)
return;
// Replace the value of the string in the CStringList.
GetDocument()->m_stringList.SetAt(pos, m_strElement);
// Replace the value of the string in the listbox by
// removing the old string and adding the new string.
m_ctlList.DeleteString(nSel);
m_ctlList.InsertString(nSel, m_strElement);
}
void CStringListView::OnRemove()
{
int nSel;
POSITION pos;
// FInd the string in both the CStringList and in the listbox.
if (FindString(nSel, pos) != TRUE)
return;
// Remove the string from the CStringList.
GetDocument()->m_stringList.RemoveAt(pos);
// Remove the string from the listbox.
m_ctlList.DeleteString(nSel);
}
void CStringListView::OnRemoveAll()
{
// Remove all of the strings from the CStringList.
GetDocument()->m_stringList.RemoveAll();
// Remove all of the strings from the listbox.
m_ctlList.ResetContent();
}
void CStringListView::OnSelChangeList()
{
// Update the edit control to reflect the new selection
// in the listbox.
m_ctlList.GetText(m_ctlList.GetCurSel(), m_strElement);
UpdateData(FALSE);
}