|
Программирование >> Процедурные приложения
UINT nHelpID. = 0) ; void FireReadyStateChange(); Базовые события void KeyDown(USHORT* pnChar); void KeyUp(USHORT* pnChar); void ButtonDown(USHORT iButton, UINT nFlags, CPoint point); void ButtonUp(USHORT iButton, UINT nFlags, CPoint point); void ButtonDblClk(USHORT iButton, UINT nFlags, CPoint point); Базовые свойства OLE COLOR m clrBackColor; Цвет фона OLE COLOR m clrForeColor; Цвет переднего плана CString m strText; Текст/Надпись CFontHolder m font; Шрифт HFONT m hFontPrev; Пред1дущий шрифт short m sAppearance; . Внешний вид short m sBorderStyle; Стиль рамки BOOLm bEnabled; Доступность longm lReadyState; Состояние готовности Схема сообщений protected: {{AFX MSG(COleControl) afx msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags), afx msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); afx msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); afx msg void OnMouseMove(UINT nFlags, CPoint point); afx msg void OnLButtonDown(UINT nFlags, CPoint point); afx msg void OnLButtonUp(UINT nFlags, CPoint point); afx msg void OnLButtonDblClk(UINT nFlags, CPoint point); afx msg void OnMButtonDown(UINT nFlags, CPoint point); afx msg void OnMButtonUp(UINT nFlags, CPoint point); afx msg void OnMButtonDblClkfUINT nFlags, CPoint point); afx msg void OnRButtonDown(UINT nFlags, CPoint point); afx msg void OnRButtonUp(UINT nFlags, CPoint point); afx msg void OnRButtonDblClk(UINT nFlags, CPoint point); afx msg void OnlnitMenuPopup(CMenu*, UINT, BOOL); afx msg void OnMenuSelect(UINT nltemlD, UINT nFlags, HMENU hSysMenu), afx msg LRESULT OnSetMessageString(WPARAM wParam, LPARAM IParam); afx msg void OnEnterldle(UINT nWhy, CWnd* pWho); afx msg void OnCancelMode(); afx msg void OnPaint(CDC* pDC); afx msg BOOL OnEraseBkgnd(CDC* pDC) ; afx msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx msg void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); afx msg int OnMouseActivate(CWnd *pDesktopWnd, UINT nHitTest, UINT message); afx msg LRESULT OnSetText(WPARAM wParam, LPARAM IParam); afx msg BOOL OnNcCreate(LPCREATESTRUCT IpCreateStruct); afx msg void OnDestroyO; afx msg void OnKillFocus(CWnd* pNewWnd); afx msg void OnSetFocus(CWnd* pOldWnd) ; afx msg void OnNcPaintO; afx msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE PARAMS* Ipncsp); afx msg UINT OnNcHitTest(CPoint point); afx msg void OnNcLButtonDown(UINT nHitTest, CPoint point); afx msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); afx msg UINT OnGetDlgCode(); afx msg int OnCreate(LPCREATESTRUCT IpCreateStruct); afx msg void OnSize(UINT nType, int ex, int cy) ; afx msg void OnMovelint x, int afxjmsg void OnShowWindow(BOOL bShow, UINT nStatus); ))AFX MSG afx msg LRESULT OnOcraCtlColorBtn(WPARAM wParam, LPARAM IParam); afx msg LRESULT OnOcmCtlColorDlg(WPARAM wParam, LPARAM IParam); afx msg LRESULT OnOcmCtlColorEdit(WPARAM wParam, LPARAM IParam); afx msg LRESULT OnOcmCtlColorListBox(WPARAM wParam, LPARAM IParam); afx msg LRESULT OnOcmCtlColorMsgBox(WPARAM wParam, LPARAM IParam); afx msg LRESULT OnOcmCtlColorScrollBar(WPARAM wParam, LPARAM IParam) , afx msg LRESULT OnOcmCtlColorStatic(WPARAM wParam, LEARAM IParam); DECLARE MESSAGE MAP() вспомогательные обработчики void OnButtonUp(USHORT nButton, UINT nFlags, CPoint point); void OnButtonDown(USHORT nButton, UINT nFlags, CPoint point); void OnButtonDblClk(USHORT nButton, UINT nFlags, CPoint point); Схемы интерфейсов public: IPersistStorage BEGIN INTERFACE PART(Persiststorage, IPersistStorage) INIT INTERFACE PART(COleControl, PersistStorage) STDMETHOD(GetClassID)(LPCLSID); STDMETHOD (IsDirty) (); STDMETHOD(InitNew)(LPSTORAGE); STDMETHOD(Load)(LPSTORAGE); STDMETHOD(Save)(LPSTORAGE, BOOL); STDMETHOD(SaveCompleted)(LPSTORAGE); STDMETHOD(HandsOffStorage)(); END INTERFACE PART STATIC(PersistStorage) IOlelnPlaceObject BEGIN INTERFACE PART(OlelnPlaceObject, IQlelnPlaceObjectWindowless) INIT INTERFACE PART(COleGontrol, OlelnPlaceObject) STDMETHOD(GetWindow)(HWND*); STDMETHOD(ContextSensitiveHelp)(BOOL); STDMETHOD(InPlaceDeactivate)(); STDMETHOD(OIDeactivate)(); STDMETHOD(SetObjectRects)(LPCRECT, LPCRECT); STDMETHOD(ReactivateAndUndo)(); STDMETHOD(OnWindowMessage)(UINT msg, WPARAM wParam, LPARAM Iparam, LRESULT* plResult); STDMETHOD(GetDropTarget)(IDropTarget **ppDropTarget); END INTERFACE PART(OlelnPlaceObject) IQlelnPlaceActiveObject BEGIN INTERFACE PART(OleInPlaceActiveObject, IQlelnPlaceActiveObject) INIT INTERFACE PART(COleControl, OlelnPlaceActiveObject) STDMETHOD(GetWindow)(HWND*); STDMETHOD(ContextSensitiveHelp)(BOOL); STDMETHOD(TranslateAccelerator)(LPMSG); STDMETHOD(OnFrameWindowActivate)(BOOL); STDMETHOD(OnDocWindowActivate)(BOOL); STDMETHOD(ResizeBorder)(LPCRECT, LPOLEINPLACEOIWINDOW, BOOL); STDMETHOD(EnableModeless)(BOOL); END INTERFACE PART(OlelnPlaceActiveObject) События События генерируются элементом управления в ответ на выполняемые над ним действия, такие как нажатие определенной комбинации клавиш или щелчок мышью. Примерами событий могут служить KeyUp и KeyDown. Класс элемента управления ActiveX, порождаемый от класса GOleControl, может иметь собственную специальную схему сообщений, посредством которой события посылаются приложению, содержащему элемент управления. Такое приложение называется контейнером. Дополнительную информацию о событии можно передать с помощью аргументов. Именно путем передачи событий организуется взаимодействие между элементом управления ActiveXи контейнером. Различаются базовые и пользовательские события. События первого типа могут генерироваться любым элементом управления и по умолчанию обрабатываются классом CQleControl. События второго типа посылаются контейнеру при выполнении над элементом управления действий, указанных разработчиком элемента. Методы и свойства Элемент управления ActiveX должен обладать рядом методов и свойств, позволяющих контейнеру в интерактивном режиме менять его, элемента управления, настройки. Методами называются функции элемента управления, которые могут вызываться контейнером. Под свойствами понимают цвет, шрифт, надпись и другие атрибуты внешнего вида элемента управления. Методы и свойства элемента управления определяются в процессе его разработки с помощью мастера ClassWizard. Базовые методы присущи всем элементам управления и по умолчанию реализуются классом COleControl. Доступ к методам и свойствам элемента управления возможен на этапе раннего связывания. При этом методы рассматриваются как обычные функции-члены класса, а свойства представляются парами функций getxxx и setxxx. Доступ к элементу управления на этапе позднего связывания регулируется интерфейсом IDispatch. Контейнер автоматически определяет тип связывания, установленный пользователем. Интерфейс IProvideClasslnfo содержит функцию GetClassInfo(), которая возвращает объект ITypelnfо с информацией об элементе управления, взятой из его библиотеки типов. Элементы управления ActiveX часто содержат расширенные наборы свойств, методов и событий, которые используются только контейнером. Постоянство Элементы управления позволяют сохранять свои данные в потоках с помощью интерфейса iPersiststream, а в хранилищах - с помощью интерфейса iPersiststorage. Первый необходим для записи данных в простой последовательный поток, а второй реализует концепцию структурированного хранения составных документов, когда каждый внедренный или связанный объект имеет собственную область хранения в общем хранилище данных документа. Благодаря механизму постоянства элемент управления ActiveXпри необходимости может записывать значения своих свойств в файл или поток, а затем считывать их. Значения свойств элемента управления могут сохраняться самим контейнером и считываться, скажем, при создании нового экземпляра элемента управления. Контейнеры Контейнеры, обеспечивающие возможность непосредственного редактирования внедренных объектов, обладают необходимым интерфейсом для использования элементов управления ActiveX. В дополнение к этому контейнеры должны поддерживать обработку событий и внешние свойства. Элемент управления ActiveXвыступает в роли переводчика сообщений. Он должен уметь преобразовывать сообщения, получаемые от пользователя, в события, понятные контейнеру. Для каждого события должна быть определена точка входа в контейнере, связанная с обслуживающей процедурой.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |