- •3 Базовые классы библиотеки mfc
- •Класс cObject
- •Методы и переменные класса cObject
- •Класс cWinApp
- •IpszResourceName - указатель на строку, содержащую имя ресурса пиктограммы. (Тип параметра также может быть cString.) nIdResource - id ресурса пиктограммы.
- •Методы - обработчики сообщений
- •Класс cWnd
- •Методы инициализации
- •Методы управления состоянием окна
- •Управление размером и положением окна
- •Методы управления доступом
- •Методы обновления и перерисовки окна
- •IpRectUpdate - структура rect, определяющая координаты обновляемой прямоугольной области. Данный параметр игнорируется, если prgnUpdate содержит ненулевой указатель области.
- •Методы преобразования координат
- •Методы работы с текстом окна
- •Методы управления линейкой прокрутки
- •Методы управления курсором ввода
- •Методы управления элементами диалогового окна
- •IpString - указатель на буфер, содержащий выбранную строку списка.
- •IpStr - указатель на буфер, в который заносится текст или заголовок элемента управления.
- •Методы работы с меню
- •Методы управления таймером
- •Предупреждающие методы
- •Методы управления сообщениями
- •Переопределяемые методы
- •Методы, вызываемые для обработки сообщений
- •IpCreateStruct - структура createstruct, содержащая информацию о создаваемом объекте cWnd.
- •Класс cFile
- •Члены класса
- •IpszFileName - строка, указывающая в кодировке Windows абсолютный или относительный путь к имени файла. Не может содержать сетевого имени.
Методы и переменные класса cObject
CObject::CObject ();
CObject::CObject (const CObject& objectSrc);
Конструкторы класса. Первый считается конструктором по умолчанию.
Отметим, что если производный класс поддерживает возможность сериализации, то он обязательно должен содержать в объявлении класса конструктор без параметров (но доступ к нему предоставлять не обязательно).
Параметры:
objectSrc - ссылка на другой CObject.
void* CObject::operator new(size_t nSize); throw(CMemoryException);
void* operator new(size_t nSize, LPCSTR ipszFileName, int nLine);
throw(CMemoryException);
Эти методы реализованы по-разному для конфигураций Release и Debug. При отладке используется схема выделения памяти, позволяющая определять "потери" памяти.
Для использования оператора new в отладочном режиме в файл .СРР вставляется строка кода: #define new DEBUG_NEW.
void CObject::operator delete (void* p);
Метод, выполняющий освобождение памяти при удалении объекта. Peaлизация этого метода также различна для конфигураций Release и Debug. void CObject::operator = (const CObject& src);
Оператор присваивания, выполняющий копирование члена класса на член класса.
virtual void CObject::AssertValid () const;
Метод выполняет проверку правильности объекта, контролируя его внутреннее состояние. При конфигурации Debug этот метод может прервать выполнение программы с сообщением об ошибке, содержащим номер строки и имя файла возникновения ошибки.
Пример:
// Класс CMyAge наследуется от Cobject class CMyAge : public Cobject { DECLARE_SERIAL (CMyAge) private: int m_years; public: CMyAge() { m_years = 0; } CMyAge (int age) { m_years = age;} CMyAge (const CMyAge& a) { m_years = a.m years; } void Serialize (CArchiveA ar); void AssertValidO const; const CMyAge& operator= (const CMyAge& a) { m_years = a.m_years; return *this; } BOOL operator==(CMyAge a) { return m years == a.m years; } #ifdef _DEBUG void Dump (CDumpContext& dc) const { CObject::Dump (dc); dc « m_years; } #endif }; // Применение метода CObject: Assert Valid void CMyAge: :AssertValid() const { CObject::AssertValid(); ASSERT (m_years > 0); ASSERT (m_years < 105;} |
virtual void CObject::Dump (CDumpContext& dc) const;
Этот метод заносит содержание данного объекта в объект, указываемый параметром dc.
Отметим, что при создании собственного класса следует переопределить метод Dump. Как правило, при этом первоначально указывается вызов метода Dump из базового класса, а затем заносится содержание членов производного класса. CObject::Dump печатает имя класса в том случае, если при реализации класса был использован макрос IMPLEMENT_DYNAMIC или IMPLEMENT_SERIAL.
Пример:
void CMyAge: :Dump (CDumpContext &dc) const { CObject::Dump (dc); dc « "Age = " « m_years; } |
Класс CDumpContext не имеет базового класса. Он поддерживает поток вывода диагностики в удобной для чтения форме - в виде текста.
Также для вывода диагностики можно использовать объект afxDump.
Класс CDumpContext имеет свой перегружаемый оператор вставки («), поэтому для изменения формата данных, заносимых в дамп, следует переопределить метод CObject::Dump.
В большинстве классов библиотеки MFC метод Dump переопределен. Для некоторых классов, не имеющих CObject в качестве базового класса, таких, как CString, CTime и др., реализован свой перегружаемый оператор вставки класса CDumpContext.
Отметим, что перед созданием объекта CDumpContext следует создать объект CFile, предназначаемый для дампа.
BOOL CObject: :IsSerializable () const;
Член структуры CRuntimeClass mJpszClassName содержит имя класса (строка, ограниченная 0-символом; тип LPCSTR).
Пример:
CMyAge a(21); CRuntimeClass* prt = a.GetRuntimeClass(); ASSERT (strcmp (prt->m lpszClassName, "CMyAge") == 0); |
BOOL CObject::IsKindOf (const CRuntimeClass* pClass) const;
Метод возвращает ненулевое значение, если данный объект соответствует классу, указанному структурой CRuntimeClass.
Пример:
CMyAge a(21); // Класс должен использовать макрос IMPLEMENT_DYNAMIC // или IMPLEMENT SERIAL ASSERT (a.IsKindOf (RUNTIME_CLASS (CMyAge))) ; // Проверка на принадлежность базовому классу: ASSERT (a.IsKindOf (RUNTIME_CLASS (CObject))) ; |