![]() |
![]() |
|
![]() |
||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||
|
![]() |
|
![]() |
|
||||||||||||||
![]() |
![]() |
2 - Три способа обновления информации на панелях CStatusBar / Экзамен MCP 70-016 / Visual C++ |
![]() |
Шаг 2 - Три способа обновления информации на панелях CStatusBarОтвет вроде как напрашивался сам собой. А все оказывается сложнее. И, если ответ 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, }; Записан в ресурсах. И с этим идентификатором должна быть связана строка, которая будет выводиться по умолчанию. Теперь в классе рамки окна надо описать функцию 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 это делает при первом удобном случае. Например, когда нет команд от пользователя. | | Автор Каев Артем. |
![]() |
![]() |
![]() |
|