C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 2 - Три способа обновления информации на панелях CStatusBar / Экзамен MCP 70-016 / Visual C++

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

2_1.gif (8176 b)

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

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

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 (11142 b)

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

2_3.gif (7298 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 это делает при первом удобном случае. Например, когда нет команд от пользователя.


| |
Автор Каев Артем.
[AD]