Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT

         

Метод OnCreate класса CStateWindow


Метод OnCreate класса CStateWindow сначала вызывает метод OnCreate базового класса CFrameWnd:

if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

   return -1;

Затем мы создаем панель состояния, указывая в качестве ее родительского окна главное окно приложения:

if(!m_wndStatusBar.Create(this))

{

   // Ошибка при создании панели состояния

   TRACE0("Failed to create status bar\n");

   return -1;  

}

После того, как панель состояния создана, вызываем метод SetIndicators, чтобы установить индикаторы:

if(!m_wndStatusBar.SetIndicators(indicators,

                      sizeof(indicators)/sizeof(UINT)))



{

   // Ошибка при установке индикаторов

   TRACE0("Failed to set indicators\n");

   return -1;  

}

Массив, содержащий идентификаторы индикаторов indicators определен в приложении следующим образом:

static UINT indicators[] =

{

   ID_SEPARATOR,           // Самый первый индикатор

   ID_INDICATOR_OVR,       // Индикатор OVR

   ID_INDICATOR_PROGRESS,  // Резервирование места для

                           // progress bar

   ID_INDICATOR_CAPS,      // Индикатор клавиши <Caps Lock>

   ID_INDICATOR_NUM,       // Индикатор клавиши <Num Lock>

   ID_INDICATOR_SCRL,      // Индикатор клавиши <Scroll Lock>

   ID_INDICATOR_TEXT,      // Индикатор TEXT/PIC

   ID_INDICATOR_ADD,       // Индикатор ADD/SUB (начальное

                           // состояние START)

};

Порядок идентификаторов в массиве indicators соответствует порядку в котором индикаторы будут отображаться в панели состояния. Размер всех индикаторов, кроме первого, выбирается автоматически, так чтобы текст индикатора полностью в нем поместился. Текст индикатора, который отображается в нем по умолчанию, берется из соответствующих строковых ресурсов приложения. Так, например, в последнем индикаторе панели состояния, который имеет идентификатор ID_INDICATOR_ADD будет отображаться строка START, имеющая тот же идентификатор и определенная в ресурсах приложения следующим образом:

STRINGTABLE DISCARDABLE

BEGIN

    ID_INDICATOR_ADD        "START"

END

Все индикаторы панели состояния, кроме индикатора ID_INDICATOR_PROGRESS, отображаются стандартным образом. Стиль индикатора ID_INDICATOR_PROGRESS устанавливается отдельно:

m_wndStatusBar.SetPaneInfo(

   m_wndStatusBar.CommandToIndex(ID_INDICATOR_PROGRESS),

   ID_INDICATOR_PROGRESS,

   SBPS_DISABLED |   // текст не отображается

   SBPS_NOBORDERS,   // рамка вокруг индикатора отсутствует

   150 );            // ширина индикатора 150 пикселов

Метод SetPaneInfo запрещает отображение текста внутри индикатора и убирает выделяющую рамку. Кроме того, метод SetPaneInfo устанавливает размер индикатора 150 пикселов.



Содержание раздела