Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 151

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 145 146 147 148 149 150 < 151 > 152 153 154 155 156 157 .. 173 >> Следующая

AFX_SRVRITEM_H_03A2EC91_ABBE_11D1_80FC_00C0F6A83B7F_INCLUDEDJ
#define AFX_SRVRITEM_H_03A2EC91_ABBE_11D1_80FC_00C0F6A83B7F__INCLUDED_
#if _MSC_VER > 1000 #pragma once
#endif // _MSC_VER > 1000
class CServDemoSrvrltem : public COleServerltem {
DECLARE_DYNAMIC(CServDemoSrvrltem)
// Конструктор public:
CServDemoSrvrltem(CServDemoDoc* pContainerDoc);
// Атрибуты
CServDemoDoc* GetDocument() const
( return (CServDemoDoc*)COleServerltem::GetDocument(); )
// Переопределения
// Переопределения виртуальных функций, // сгенерированные мастером ClassWizard //((AFX VIRTUAL(CServDemoSrvrltem)
public:
virtual BOOL OnDraw(CDC* pDC, CSize& rSize);
virtual BOOL OnGetExtent(DVASPECT dwDrawAspect, CSize& rSize); //}}AFX__VIRTUAL
// Реализация public:
~CServDemoSrvrItem() ; #i?def _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContextS dc) const; #endif
protected:
virtual void Serialize(CArchive& ar); // переопределено для
// ввода/вывода документа
111111111111111111111111111111 /1П1111111111 /11! I /11111! /1111 /111111
11 { (AFX_INSERT_LOCATION) )
// Visual С++ вставит дополнительные объявления // сразу перед предыдущей строкой
#endif
// !defined(
// AFX_SRVRITEM_H_03A2EC91__ABBE_11D1_80FC_00C0F6A83B7F_INCLUDEDJ
Листинг 24.12.
// Srvrltem.cpp : реализация класса CServDemoSrvrltem //
tfinclude "stdafx.h" #include "ServDemo.h"
#include "ServDemoDoc.h" #include "Srvrltem.h"
#ifdef _DEBUG Idefine new DEBUG_NEW #undef THIS__FILE
static char THIS_FILE[] = _FILE__;
#endif
11111II111111111111111111 f i 111 f I /1111 f /111 /111111 i /11111111 /111 /11111 I7 Реализация класса CServDemoSrvrltem
IMPLEMENT DYNAMIC(CServDemoSrvrltem, COleServerltem)
CServDemoSrvrltem::CServDemoSrvrltem(CServDemoDoc* pContainerDoc) : COleServerltem(pContainerDoc, TRUE)
// TODO: Здесь добавьте код конструктора (т.е. добавьте
// дополнительные форматы буфера к источнику данных OLE-компонента!
CServDemoSrvrltem::-CServDemoSrvrltem;)
{
// TODO: здесь добавьте код очистки
}
void CServDemoSrvrltem::Serialize(CArchiveS ar) {
// Функция CServDemoSrvrltem::Serialize вызывается шаблоном,
// если элемент скопирован в буфер. При вызове функции
// OnGetClipboardData OLE это происходит автоматически.
// Обычно при внедрении компонента выполняется сериализация
// всего документа, а при связывании - только его части
if ( HsLinkedltemO ) {
CServDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDoc->Serialize(ar);
)
}
BOOL CServDemoSrvrltem: :OnGetExtent
(DVASPECT dwDrawAspect, CSizes rSize)
{
// Большинство приложений, подобных данному, управляют // отображением содержимого компонента. Если нужно поддержать // другие аспекты, например DVASPECT_THUMBNAIL (переопределяя // OnDrawEx), то следует изменить реализацию метода OnGetExtent
if (dwDrawAspect != DVASPECT_CONTENT)
return COleServerltem::OnGetExtent(dwDrawAspect, rSize);
// Функция CServDemoSrvrltem::OnGetExtent вызывается для получения
// размера элемента в единицах HIMETRIC. Стандартная
// реализация возвращает закодированное количество единиц
CServDemoDoc* pDoc = GetDocumentО; ASSERT_VALID(pDoc);
// TODO: заменяется произвольным размером
rSize = CSizepOOO, 3000); // 3000 х 3000 единиц HIMETRIC return TRUE;
I
BOOL CServDemoSrvrltem::OnDraw(CDC* pDC, CSizes rSize) (
// Удаляется при использовании rSize UNREFERENCED_PARAMETER(rSize);
CServDemoDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
// TODO: установите режим отображения и размер
// (обычно размер такой же, как возвращаемый функцией OnGetExtent) pDC->SetMapMode(MM_ANISOTROPIC); pDC->SetWindowOrg(0,0);
// Замените вызов, сгенерированный мастером AppWizard, // вызовом функции SetWindowExt pDC->SetWindowExt(pDoc->GetDocSize () ) ;
// TODO: здесь добавьте код отображения. Можно заполнить // размер HIMETRIC. Все операции отображения помещаются // в метафайл контекста устройства (pDC)
// такой же код, как в функции CServDemoView::OnDraw: int Index = pDoc->GetNumLines () ; while (Index—)
pDoc->GetLine (Index)-> Draw (pDC);
return TRUE;
}
////////////////////////////////////////////////////////////////////// // Диагностика класса CServDemoSrvrltem
#ifdef _DEBUG
void CServDemoSrvrltem::AssertValid() const {
COleServerltem::AssertValid();
)
void CServDemoSrvrltem::Dump(CDumpContextS dc) const
{
COleServerltem::Dump(dc);
)
tendif
///////////////////////////////////////////////////////////////////////
Создание программы-контейнера
Теперь можно использовать мастер AppWizard для создания простой программы-контейнера OLE. В приложение не нужно добавлять специальный код, поскольку программа, сгенерированная мастером, подходит для проверки созданного сервера OLE.
Присвоим новой программе имя ContDemo. В диалоговых окнах AppWizard (Step 1 — Step 6) выберите такие же опции, как и при создании программы WinGreet (см. гл. 9). Одно исключение — в диалоговом окне мастера (Step 3) выберите опцию Container, а остальные опции оставьте неизменными (рис. 24.6).
Предыдущая << 1 .. 145 146 147 148 149 150 < 151 > 152 153 154 155 156 157 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100