Visual C++. Описание стандартных классов
Страница 16.


 
CMenu
Класс CMenu используется для работы с дескрипторами HMENU Windows. Он содержит функции для создания, отслеживания, обновления и уничтожения меню. Объект класса CMenu следует локально создавать в стеке. После этого необходимо вызвать функцию CWnd::SetMenu для замены меню в окне и сразу же вызвать функцию CMenu::Detach. Функция CWnd::SetMenu устанавливает в окне новое меню, вызывая его перерисовку для отображения нового меню, а также передает окну права собственности на меню. Функция Detach освобождает дескриптор HMENU из объекта класса CMenu, так что, при уничтожении данного объекта класса CMenu деструктор не попытается уничтожить меню, на которое он уже не имеет права собственности. Само меню уничтожается деструктором окна при его закрытии. Функция LoadMenuIndirect создает меню по шаблону, хранящемуся в памяти, однако, с меню, созданным функцией LoadMenu с использованием ресурсов, намного проще работать, а ресурсы меню могут создаваться и изменяться в редакторе меню. Описание данного класса содержится в файле заголовка afxwin.h.
GetMenuContextHelpId
DWORD GetMenuContextHelpId() const;
Возвращаемое значение
Если с данным объектом класса CMenu связан идентификатор контекстной справки, возвращает этот идентификатор. В противном случае возвращает нулевое значение.
Описание
Данная функция позволяет получить идентификатор контекстной справки, связанный с данным объектом класса CMenu.
SetMenuContextHelpId
BOOL SetMenuContextHelpId(DWORD dwContextHelpId);
Возвращаемое значение
Ненулевое, в случае успешного завершения работы, и нулевое в противном случае.
Аргументы
"sectiontableheader"dwContextHelpId - идентификатор контекстной справки, связываемый с данным объектом класса CMenu.
Описание
Данная функция связывает идентификатор контекстной справки с объектом класса CMenu. Этот идентификатор разделяют все команды данного меню. Отсутствует возможность назначить идентификатор контекстной справки отдельной команде данного меню.
CMonthCalCtrl
Класс CMonthCalCtrl используется для работы с элементом управления, содержащим календарь на месяц. Используя интерфейс этого элемента управления пользователь может выбирать любую дату в текущем месяце или перейти к любому месяцу любого года. Для изменения формы отображения пользователь может предпринять следующие действия:
"sectiontableheader"просматривать месяцы вперед и назад;
"sectiontableheader"щелкните правой кнопкой мыши на элементе управления (если не используется стиль MCS_NOTODAY) и в появившемся контекстном меню выбрать единственную команду К сегодняшней дате, в результате в элементе управления будет отображен текущий месяц, а в нем будет выделена текущая дата;
"sectiontableheader"выбрать месяц и год из контекстного меню (вопрос только как его вывести).
При создании данного элемента управления для него могут быть заданы следующие стили:
"sectiontableheader"MCS_DAYSTATE - определяет, что элемент управления должен запрашивать информацию о том, какие дни недели нужно выделять жирным шрифтом. Для этого он посылает извещение MCN_GETDAYSTATE;
"sectiontableheader"MCS_MULTYSELECT - позволяет пользователю задавать диапазон дат;
"sectiontableheader"MCS_NOTODAY - в нижней части элемента управления не выводится текущая дата;
"sectiontableheader"MCS_NOTODAYCIRCLE - текущая дата не обводится;
"sectiontableheader"MCS_WEEKNUMBERS - Слева от каждой строки дней выводится номер недели (от 1 до 52).
При своей работе этот элемент управления может посылать родительскому окну некоторые извещения. Наиболее интересные из них приведены ниже: "sectiontableheader"MCN_GETDAYSTATE - элемент управления запрашивает о необходимости выделения некоторых дней жирным шрифтом;
"sectiontableheader"MCN_SELCHANGE - изменилась текущая дата или диапазон дат;
"sectiontableheader"MCN_SELECT - пользователь выбрал конкретную дату в календаре.
Описание данного класса содержится в файле заголовка afxdtctl.h
GetCurSel
BOOL GetCurSel(COleDateTime& refDateTime) const;
BOOL GetCurSel(CTime& refDateTime) const;
BOOL GetCurSel(LPSYSTEMTIME pDateTime) const;
Возвращаемое значение
Ненулевое, если функция завершилась успешно, и нулевое в противном случае.
Аргументы
"sectiontableheader"refDateTime - ссылка на объект класса COleDateTime или на объект класса CTime, в который будет записана информация о дате.
"sectiontableheader"pDateTime - указатель на объект структуры SYSTEMTIME, в который будет записана информация о дате.
Описание
Позволяет получить информацию о системном времени, выделенную в соответствующем элементе управления. Эта функция выполняет те же действия, что и сообщение Win32 MCM_GETCURSEL. При реализации в библиотеке MFC функция SetCurSel может получать информацию не только из объекта структуры SYSTEMTIME, но и из объектов классов COleDateTime и CTime. Если в элементе управления установлен флаг MCS_MULTISELECT выполнение данной функции завершается с ошибкой.
SetCurSel
BOOL SetCurSel(const COleDateTime& refDateTime); BOOL SetCurSel(const CTime& refDateTime); BOOL SetCurSel(const LPSYSTEMTIME pDateTime);
Возвращаемое значение
Ненулевое, если функция завершилась успешно, и нулевое в противном случае.
Аргументы
"sectiontableheader"refDateTime - ссылка на объект класса COleDateTime или на объект класса CTime, содержащий информацию о выделяемой дате.
"sectiontableheader"pDateTime - указатель на объект структуры SYSTEMTIME, содержащий информацию о выделяемой дате.
Описание
Выделяет указанную дату в элементе управления календаря. Эта функция выполняет те же действия, что и сообщение Win32 MCM_SETCURSEL. При реализации в библиотеке MFC функция SetCurSel может получать информацию не только из объекта структуры SYSTEMTIME, но и из объектов классов COleDateTime и CTime.
CObArray
Класс CObArray представляет собой класс массива указателей на объект класса CObject. Этот массив объектов аналогичен массивам языка C, но способен динамически изменять свой размер.
Индекс первого элемента массива всегда равен 0. Пользователь может зафиксировать верхнюю границу массива или позволить ему расти при добавлении новых элементов, если их индекс превышает его верхнюю границу. Для данного массива всегда выделяется единая область памяти, даже в том случае, когда отдельные его элементы не используются.
При использовании Win32 размер объекта класса CObArray определяется только доступной областью памяти. Как и в случае массивов языка C, время доступа к любому элементу массива CObArray постоянно и не зависит от размера массива.
Класс CObArray включает в себя макрос IMPLEMENT_SERIAL, позволяющий работать с архивом и выводить диагностические сообщения. Если массив указателей на объекты класса CObject сохраняется в архиве, независимо от того используется ли для этого перегруженный оператор << или функция Serialize, то в архиве сохраняется каждый объект класса CObject, для чего вызывается его собственная функция Serialize, и его индекс в массиве.
При необходимости вывести диагностическую информацию об отдельном объекте класса CObject, хранящегося в массиве, необходимо указать глубину объекта CDumpContext равной 1 или большей величине.
При уничтожении объекта класса CObArray или при удалении из него элементов уничтожаются только указатели на объекты класса CObject, а не сами объекты, на которые ссылаются данные указатели.
Прежде чем использовать массив, необходимо вызвать функцию SetSize для установки его размера и резервирования необходимой памяти. Если при создании массива не использовалась функция SetSize, то при добавлении в него элементов часто будет производиться перераспределение памяти и копирование массива, что может привести к замедлению работы программы и к фрагментации памяти.
Для работы с архивом необходимо использовать макрос IMPLEMENT_SERIAL для данного класса.
Описание данного класса содержится в файле заголовка afxcoll.h.
Add
int Add(CObject* newElement); throw(CMemoryException);
Возвращаемое значение
Индекс добавленного в массив элемента.
Аргументы
"sectiontableheader"newElement - указатель на объект класса CObject, добавляемый в массив.
Описание
Добавляет новый элемент в конец массива, увеличивая его размер на 1. Если в функции SetSize аргумент nGrowBy имеет значение больше 1 и увеличение размера массива на 1 привело к выходу за пределы отведенной ему памяти, то для массива выделяется дополнительная память, в которую могут быть записаны новые элементы без новой операции выделения памяти, размер которой определяется аргументом nGrowBy функции SetSize. Соответствующие функции, отличающиеся только типом своих аргументов, имеются в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray.
GetSize
int GetSize() const;
Возвращаемое значение
Размер массива.
Описание
Возвращает размер массива. Поскольку первый элемент массива имеет нулевой индекс, размер массива всегда на 1 превышает максимальный индекс элемента массива. Идентичная функция имеется в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray.
 
« Предыдущая статья   Следующая статья »