На этом шаге мы рассмотрим обработку уведомляющих сообщений от диалогового окна Select Fund.
Назначение диалогового окна Select Fund - предоставить информацию о ценах только для выбранной пользователем ценной бумаги. Список ценных бумаг уже создан, и теперь нужно реализовать обработку команд пользователя.
Вначале добавим переменную m_strCurrentFund для хранения названия выбранной ценной бумаги. Поскольку в дальнейшем мы сделаем переменную m_strCurrentFund частью данных документа, она должна быть членом класса CSTUploadDoc.
Чтобы эта переменная всегда представляла выделенную в диалоговом окне Select Fund строку, надо обрабатывать уведомляющие ее общения от соответствующего элемента управления. Список посылает своему родительскому окну (объекту CFundDialog) сообщение LBN_SELCHANGE всякий раз, когда выделяется другая строка. Обработчик этого сообщения можно создать средствами ClassWizard.
Изменим функцию CSTUploadView::OnDraw() таким образом, чтобы она считывала название выбранной ценной бумаги из хранящейся в объекте документа переменной и отображала только относящиеся к ней данные.
m_strCurrentFund = "";
CString GetCurrentFund () {return m_strCurrentFund;}
void SetCurrentFund (CString strSet){m_strCurrentFund= strSet;}
Рис.1. Добавление кода
Рис.2. Добавление функции 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"
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;
}
Текст измененного приложения можно взять здесь (58,1 Кб).
На следующем шаге мы рассмотрим реализацию отображения этого окна поверх остальных окон.