Шаг 2 - Три способа обновления информации на панелях CStatusBar

2_1.gif (8176 b)

Ответ вроде как напрашивался сам собой. А все оказывается сложнее. И, если ответ b вроде тоже нормальный и можно догадаться, то вот ответ a меня заставил сильно задуматься. Итак, давайте рассмотрим все варианты от простого к сложному.

Если у Вас есть строка состояния то вывести нее надпись можно:

void CMainFrame::OnTestMethod1() 
{
	m_wndStatusBar.SetPaneText(0,"Hello"); 
}

Это вы можете почитать "Шаг 17 - Вывод данных в панель состояния". Сначала номер панели, потом текст.

Опять, если у Вас есть строка состояния, то вывести данные в 0 панель можно с помощью функции SetWindowText() имеено в нулевую. А этот метод унаследован от класса CWnd.

void CMainFrame::OnTestMethod3() 
{
	m_wndStatusBar.SetWindowText("Test"); 
}

И последний метод - это на основе макроса ON_UPDATE_COMMAND_UI. Только здесь все сложнее и писать код нужно руками, так как строка состояния не посылает команд и ClassWizard здесь безпомощен. Для того, чтобы воспользоваться этим методом идентификатор Вашей строки должен быть включен в список панелей.

static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_PAGE,
ID_INDICATOR_PAGE1,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};

Записан в ресурсах.

2_2.gif (1962 b)

И с этим идентификатором должна быть связана строка, которая будет выводиться по умолчанию.

Теперь в классе рамки окна надо описать функцию OnUpdatePage():

class CMainFrame : public CFrameWnd
{
protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
afx_msg void OnUpdatePage(CCmdUI *pCmdUI);
// Attributes
.......
};

И написать эту функцию

void CMainFrame::OnUpdatePage(CCmdUI *pCmdUI) 
{
	pCmdUI->Enable(); 
	pCmdUI->SetText(m_nPage ); 
}

Так же добавить макрос в таблицу событий:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_TEST_METHOD1, OnTestMethod1)
ON_COMMAND(ID_TEST_METHOD2, OnTestMethod2)
ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, OnUpdatePage)
ON_COMMAND(ID_TEST_METHOD3, OnTestMethod3)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

И теперь стоит изменить переменную m_nPage, как изменения отразятся на строке состояния. Этот макрос вызывается при необходимости обновления пользовательского интерфейса. А MFC это делает при первом удобном случае. Например, когда нет команд от пользователя.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 13.04.2001