Приложение STUpload. Обработка уведомляющих сообщений от Select Fund

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

   
Назначение диалогового окна Select Fund - предоставить информацию о ценах только для выбранной пользователем
ценной бумаги. Список ценных бумаг уже создан, и теперь нужно реализовать обработку команд пользователя.

   
Вначале добавим переменную m_strCurrentFund для хранения названия выбранной ценной бумаги. Поскольку в
дальнейшем мы сделаем переменную m_strCurrentFund частью данных документа, она должна быть членом
класса CSTUploadDoc.

   
Чтобы эта переменная всегда представляла выделенную в диалоговом окне Select Fund строку, надо обрабатывать
уведомляющие ее общения от соответствующего элемента управления. Список посылает своему родительскому окну
(объекту CFundDialog) сообщение LBN_SELCHANGE всякий раз, когда выделяется другая строка.
Обработчик этого сообщения можно создать средствами ClassWizard.

   
Изменим функцию CSTUploadView::OnDraw() таким образом, чтобы она считывала название выбранной ценной
бумаги из хранящейся в объекте документа переменной и отображала только относящиеся к ней данные.

  • Добавление переменной CDocument::m_strCurrentFund.
  • Правой кнопкой мыши щелкните узел CSTUploadDoc на вкладке ClassView и добавьте защищенную
    переменную-член m_strCurrentFund типа CString.
  • Инициализация переменной-члена m_strCurrentFund в конструкторе класса.
  • Дважды щелкните значок, представляющий конструктор класса CSTUploadDoc.
  • Добавьте следующую строку:
        m_strCurrentFund = "";
    
  • Создание функций доступа к переменной-члену m_strCurrentFund.
  • Добавьте следующий код в раздел public объявления класса CSTUploadDoc:
        CString GetCurrentFund ()  {return m_strCurrentFund;}
        void SetCurrentFund (CString strSet){m_strCurrentFund= strSet;}
    


    Рис.1. Добавление кода

  • Добавление метода в класс CFundDialog для обработки сообщения LBN_SELCHANGE.
  • Нажмите CTRL+W, чтобы открыть ClassWizard. Щелкните вкладку Message Maps.
  • В списке Class Name выберите CFundDialog.
  • В списке Object IDs щелкните IDC_FUNDLIST.
  • В списке Messages выберите LBN_SELCHANGE.
  • Щелкните Add Function. Щелкните OK, чтобы подтвердить предлагаемое имя функции-обработчика OnSelchangeFundlist.
    Рис.2. Добавление функции OnSelchangeFundlist
  • Щелкните Edit Code. Откроется файл FundDialog.cpp, и курсор будет установлен в начало функции.
  • Реализация функции CMainFrame::OnSelchangeFundlist().
  • Добавьте в тело функции следующий код:
    CMainFrame * pWnd = dynamic_cast< CMainFrame * > (AfxGetMainWnd());
    ASSERT_VALID( pWnd );
    CSTUploadDoc * pDoc = 
           dynamic_cast< CSTUploadDoc * >( pWnd->GetActiveDocument());
    ASSERT_VALID( pDoc );
    CString strCurFund;
    int sel = m_listBox.GetCurSel();
    if( sel == LB_ERR ) sel = 0;
    m_listBox.GetText( sel, strCurFund );
    pDoc->SetCurrentFund( strCurFund );
    pDoc->UpdateAllViews( NULL );
    
  • Добавьте следующие строки в начало файла:
      #include "MainFrm.h" 
      #include "STUploadDoc.h"
    
  • Изменение функции CSTUploadView::OnDraw().
  • Найдите цикл отображения в конце функции CSTUploadView::OnDraw().
    После обращения к функции CStockDataList::GetNext() добавьте следующий код:

      if(sd.GetFund()  != pDoc->GetCurrentFund()) continue;
    


    Рис.3. Добавление кода
    Весь цикл теперь должен выглядеть следующим образом:

      while( pos )
        {
          CStockData sd = pData.GetNext( pos );
          if(sd.GetFund()  != pDoc->GetCurrentFund()) continue;
          pDC->TextOut( 10, yPos, sd.GetAsString() );
          yPos += nTextHeight;
         }
    
  • Соберите и запустите приложение STUpload. Убедитесь, что данные загружаются как и прежде.
    Однако записи появляются только после того, как Вы выберете ценную бумагу в диалоговом окне Select Fund.

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

   
На следующем шаге мы рассмотрим реализацию отображения этого окна поверх остальных окон.



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

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