Приложение STUpload. Отображение названий ценных бумаг в списке Funds

   
На этом шаге мы рассмотрим алгоритм заполнения окна Select Fund.

   
Сейчас напишем функцию, загружающую названия ценных бумаг в список, который отображается в диалоговом окне
Selection Fund. Поскольку записи с информацией о ценных бумагах, хранящиеся в объекте
CSTUploadDoc::m_DocList, отсортированы по названиям ценных бумаг, то организовать цикл для
извлечения из списка уникальных названий достаточно легко.

   
Прежде чем писать функцию, создайте переменную типа CListBox.

  • Добавление переменной-члена CFundDialog::m_listBox.
  • Нажмите CTRL+W, чтобы запустить ClassWizard. Щелкните вкладку Member Variables.
  • В списке Class Name выберите CFundDialog.
  • Щелкните Add Variable. В поле Member variable name введите m_listBox.
  • В списке Category выберите Control. В списке Variable Type появится тип CListBox.
    Рис.1. Добавление переменной m_listBox
  • Щелкните OK, чтобы создать переменную, и еще раз щелкните ОК, чтобы закрыть ClassWizard.

   
Теперь Вам нужно добавить в класс CMainFrame функцию-член UpdateFundList(), предназначенную
для помещения в список названий ценных бумаг. У функции два параметра - ссылка на источник названий типа
CStockDataList и строка, в которой задается имя первоначально выбранной ценной бумаги. Если во втором
параметре задана пустая строка (значение по умолчанию) или указанная ценная бумага в списке не найдена, то никакой
элемент не будет выделен.

  • Реализация функции CMainFrame::UpdateFundList().
  • На вкладке FileView раскройте узел Header Files и дважды щелкните значок файла MainFrm.h.
  • В начале файла после других операторов #include добавьте следующую строку:
        #include "StockDataList.h"
    
  • Щелкните вкладку ClassView и правой кнопкой мыши щелки значок CMainFrame. Выбрав пункт
    Add Member Function, добавьте объявление функции в раздел public. Оно должно выглядеть так:

      void UpdateFundList(const CStockDataList & pList, 
              CString strCurrentFund = "");
    
  • Добавьте следующий код в тело функции UpdateFundList():
    // Функция добавляет в список 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(), которая в окончательном варианте будет
    загружать данные из текстового файла. А пока ограничимся тем, что поместим в список несколько фиксированных записей.

  • Pеализация функции STUploadDoc::LoadData().
  • На вкладке ClassView щелкните правой кнопкой мыши узел STUploadDoc. В диалоговом окне
    Add Member Function в раздел protected объявления класса добавьте объявление функции, которое
    должно выглядеть следующим образом:

        BOOL LoadData(CStdioFile & infile);
    
  • В текст функции LoadData() добавьте следующий код:
    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;
    
  • В начале файла CSTUploadDoc.cpp добавьте следующую строку:
        #include "MainFrm.h"
    
  • Найдите конструктор класса CSTUploadDoc. Удалите весь его код, чтобы конструктор остался пустым:
    CSTUploadDoc::CSTUploadDoc()
    {
    }
    
  • Установите курсор в конец функции CSTUploadDoc::OnDataImport(). Перед закрывающей фигурной
    скобкой вставьте код для вызова функции LoadData():

    if(nID == IDOK) 
    {
      CStdioFile aFile; 
      LoadData(aFile); 
    }
    

   
Теперь можно собрать приложение STUpload. Выберите в меню Data команду Import. Посредством
диалогового окна Open откройте файл Ch5Test.dat (он находится в папке STUpload). Из него
считываются записи с информацией о ценных бумагах ARSC, BBIC и СОМР. Они должны
быть перечислены в диалоговом окне Select Fund.

   
Текст измененного приложения можно взять здесь (58,6 Кб).

   
На следующем шаге мы рассмотрим обработку уведомляющих сообщний от диалогового окна Select Fund.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий