На этом шаге мы рассмотрим алгоритм заполнения окна Select Fund.
Сейчас напишем функцию, загружающую названия ценных бумаг в список, который отображается в диалоговом окне Selection Fund. Поскольку записи с информацией о ценных бумагах, хранящиеся в объекте CSTUploadDoc::m_DocList, отсортированы по названиям ценных бумаг, то организовать цикл для извлечения из списка уникальных названий достаточно легко.
Прежде чем писать функцию, создайте переменную типа CListBox.
Рис.1. Добавление переменной m_listBox
Теперь Вам нужно добавить в класс CMainFrame функцию-член UpdateFundList(), предназначенную для помещения в список названий ценных бумаг. У функции два параметра - ссылка на источник названий типа CStockDataList и строка, в которой задается имя первоначально выбранной ценной бумаги. Если во втором параметре задана пустая строка (значение по умолчанию) или указанная ценная бумага в списке не найдена, то никакой элемент не будет выделен.
#include "StockDataList.h"
void UpdateFundList(const CStockDataList & pList,
CString strCurrentFund = "");
// Функция добавляет в список CStockDataLists названия ценных бумаг. // Он отсортирован по именам, поэтому делается это легко. CListBox *pListBox = &m_wndFundDialog.m_listBox; // Очистить содержание списка pListBox->ResetContent(); CString strLastFund; POSITION pos = pList.GetHeadPosition(); while( pos ) { CStockData sd = pList.GetNext( pos ); CString strFund = sd.GetFund(); if( strFund != strLastFund ) pListBox->AddString( strFund ); strLastFund = strFund; } // Выделяем в списке элемент, соответствующий параметру // strCurrentFund. // Если параметр пустой или не найден, выбор не делаем. int iPos = pListBox->FindStringExact( -1, strCurrentFund ); pListBox->SetCurSel( iPos );
Просмотрите код функции и постарайтесь понять, как она работает.
Функцию UpdateFundList() вызывает функция LoadData(), которая в окончательном варианте будет загружать данные из текстового файла. А пока ограничимся тем, что поместим в список несколько фиксированных записей.
BOOL LoadData(CStdioFile & infile);
m_DocList.AddTail( CStockData( _T("ARSC"), COleDateTime( 1999, 4, 1, 0, 0, 0 ), 22.33 )); m_DocList.AddTail( CStockData( _T("ARSC"), COleDateTime( 1999, 4, 2, 0, 0, 0 ), 25.44 )); m_DocList.AddTail( CStockData( _T("ARSC"), COleDateTime( 1999, 4, 3, 0, 0, 0 ), 23.55 )); m_DocList.AddTail( CStockData( _T("ARSC"), COleDateTime( 1999, 4, 4, 0, 0, 0 ), 27.66 )); m_DocList.AddTail( CStockData( _T("ARSC"), COleDateTime( 1999, 4, 5, 0, 0, 0 ), 28.77 )); m_DocList.AddTail( CStockData( _T("BBIC"), COleDateTime( 1999, 4, 1, 0, 0, 0 ), 15.33 )); m_DocList.AddTail( CStockData( _T("BBIC"), COleDateTime( 1999, 4, 2, 0, 0, 0 ), 16.44 )); m_DocList.AddTail( CStockData( _T("BBIC"), COleDateTime( 1999, 4, 3, 0, 0, 0 ), 13.55 )); m_DocList.AddTail( CStockData( _T("BBIC"), COleDateTime( 1999, 4, 4, 0, 0, 0 ), 14.66 )); m_DocList.AddTail( CStockData( _T("BBIC"), COleDateTime( 1999, 4, 5, 0, 0, 0 ), 12.77 )); m_DocList.AddTail( CStockData( _T("COMP"), COleDateTime( 1999, 4, 1, 0, 0, 0 ), 15.33 )); m_DocList.AddTail( CStockData( _T("COMP"), COleDateTime( 1999, 4, 2, 0, 0, 0 ), 16.44 )); m_DocList.AddTail( CStockData( _T("COMP"), COleDateTime( 1999, 4, 3, 0, 0, 0 ), 18.55 )); m_DocList.AddTail( CStockData( _T("COMP"), COleDateTime( 1999, 4, 4, 0, 0, 0 ), 21.66 )); m_DocList.AddTail( CStockData( _T("COMP"), COleDateTime( 1999, 4, 5, 0, 0, 0 ), 19.77 )); // Обновляем главное окно UpdateAllViews( NULL ); // Обновляем диалоговое окно CMainFrame * pWnd = dynamic_cast< CMainFrame * > (AfxGetMainWnd()); if( pWnd ) { pWnd->UpdateFundList( m_DocList ); // Отображаем окно со списком после загрузки новых данных pWnd->SetFundsVisible( TRUE ); } return TRUE;
#include "MainFrm.h"
CSTUploadDoc::CSTUploadDoc() { }
if(nID == IDOK)
{
CStdioFile aFile;
LoadData(aFile);
}
Теперь можно собрать приложение STUpload. Выберите в меню Data команду Import. Посредством диалогового окна Open откройте файл Ch5Test.dat (он находится в папке STUpload). Из него считываются записи с информацией о ценных бумагах ARSC, BBIC и СОМР. Они должны быть перечислены в диалоговом окне Select Fund.
Текст измененного приложения можно взять здесь (58,6 Кб).
На следующем шаге мы рассмотрим обработку уведомляющих сообщний от диалогового окна Select Fund.