Листинги программ к лабораторной работе № 6



/. Файл CNT.CPP

// Cnt.cpp: определяет работу приложения.

//

#include "stdafx.h”

#include "Cnt.h"

#include "MainFrm.h"

#include "CntDoc. h"

#include "CntView. h" tfifdef _DEBUG #define new DEBUG_NEW ftundef THIS_FILE

static char THIS_FILE[] = _FILE_; tfendif

// ССп tApp

ВЕаЫ _ МЕ 35 АСЕ _ МАР { ССп tApp, СПх пАрр ) // { ( АРХ _ М 5 С _ МАР (CCntApp)

0 Ы _ СОММАЫО ( Ю _ АРР _ АВОиТ , OnAppA Ь out)

// ПРИМЕЧАНИЕ: мастер классов будет добавлять и удалять // здесь макросы схемы сообщений.

// НЕ РЕДАКТИРУЙТЕ то, что здесь находится.

/ / } }АРХ_М5С_МАР

// Стандартные операции с документами

ON_COMMAND(ID_FILE_NEW, CWinApp :: OnFileNew)

ON COMMAND(ID FILE OPEN, CWinApp: :OnFileOpen)

// Стандартная команда задания установок принтера

ON_COmAND (ID_FILE_PRINT_SETUP, CWinApp:

:OnFilePrintSetup)

END MESSAGE MAP () // Конструктор класса CcntApp

CCn tApp: : CCn tApp () {

// Здесь добавьте код конструктора.

// Все наиболее важные команды инициализации // разместите в методе Initlnstance.

}

/////////////////////////////////////////////////////// // Единственный объект класса CCntAppCCntApptheApp;

///////////////////////////////////////////////////////

// Инициализация класса CcntApp

BOOLCCntApp: : Initlnstance () {

// Инициализация библиотек OLE

if (!Afx01eInit () )

{

AfxMessageBox (IDP_OLE_INIT_FAILED) ; return FALSE; } AfxEnableControlContainer ();

// Стандартная инициализация.

// Если вам не нужны используемые здесь возможности // и вы хотите сократить размер исполняемого файла,

// удалите ненужные команды.

tifdef _AFXDLL Enable3dControls () ;

// Эта функция вызывается при // динамической компоновке MFC

#else

Enable3dControlsStat±c () ;

// эта функция вызывается при // статической компоновке MFC

tfendif

// Измените раздел реестра, где будут храниться // параметры программы.

SetRegistryKey (_ Т ( "Local AppWizard-Generated Applications ") ) ;

LoadStdProfileSettings () ;

// загрузка параметров из JWJ-файла // Регистрация шаблонов документов приложения

CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate (

IDR_MA IN FRAME ,

RUNTIME_CLASS (CCntDoc) ,

RUNTIME_CLASS (CMainFrame) , // основное SDI- окно » RUNTIME_CLASS (CCntView) ) ;

pDocTemplate->SetContainer!nfo(IDR_CNTR_INPLACE) ; AddDocTemplate (pDocTemplate) ;

// Анализ командной строки на предмет поиска системных команд, DDE-команд или команд открытия файлов.

CCommandLinelnfo cmdlnfo;

ParseCommandLine (cmdlnf о );

// Обработка команд, указанных в командной строке

if ( ! ProcessShellCommand (cmdlnfo) ) return FALSE;

// Отображение окна приложения

_pMainWnd->ShowWindow (SW_SHOW) ; m_pMainWnd->UpdateWindow () ; return TRUE;

}

///////////////////////////////////////////////////////

// Класс CAboutDlg, управляющий окном About

class CAboutDlg : public Cdialog { public:CAboutDlg ( ) ;

// Данные диалогового окна

// [1] AFX_MSG_MAPEND_MESSAGE_MAP ( )

static UINT indicators!] = {

ID_SEPARATOR, // поля строки состояния ID_INDICATOR_/4CAPS,

ID_INDICATOR_NUM,

ID_INDICATOR_SCRL,

};

///////////////////////////////////////////////////////

ИКонструктор и деструктор класса CMainFrame CMainFrame::CMainFrame() {

// Здесь добавьте код конструктора.

}

CMainFrame::-CMainFrame() f

int CMainFrame: :OnCreate (LPCREATESTRUCT

IpCreateStruct) {

if (CFrameWnd: :OnCreate (IpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE I CBRS_TOP | CBRS_GRIPPER I CBRSJTOOLTIPS I CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |

!m_wndToolBar.LoadToolBar(IDR_MAINFRAME) ) {

TRACEO ("Failed to create toolbar ") ; return-1; // создать панель инструментов не удалось }

if (!m_wndStatusBar.Create(this)||

!m_wndStatusBar.Setlndicators(indicators, sizeof(indicators)/sizeof(UINT))) (

TRACEO("Failedto create status bar "); return -1;

// создать строку состояния не удалось}

// Удалите следующие три строки, если вы не хотите,

// чтобы панель инструментов была перемещаемой.

m_wndToolBar . EnableDocking (CBRS_ALIGN_ANY) ; EnableDocking(CBRS_ALIGN_ANY) ;

DockControlBar (Sm_wndToolBar) ; return 0;

}

BOOL CMainFrame: : PreCreateWindow (CREATESTRUCT Ses) {

if(ICFrameWnd: : PreCreateWindow (cs)) return FALSE;

// Здесь можно модифицировать класс окна, изменяя // поля структуры cs.

return TRUE; }

/////////////////////////////////////////////////////// // Диагностика класса CmainFrame #ifdef _DEBUG

void CMainFrame: :AssertValid () const

{

CFrameWnd: :AssertValid() ;

}

void CMainFrame::Dump(CDumpContext Sdc) const

{

CFrameWnd::Dump(dc); }

#endif //_DEBUG

///////////////////////////////////////////////////////

// Обработчики сообщений класса CMainFrame

3. Файл СИТООС-СРР

Файл €N7000.СРР содержит ряд дополнительных фрагментов, с которыми ранее мы не встречались.

// СпбДос.срр: реализация класса ССпбДос// #include "stdafx.h" #include "Cnt.h"

# include "CntDoc.h"

#include "Cntrltem.h" tifdef _DEBUG #define new DEBUG_NEW lundef THIS_FILE

static char THIS_FILE[] = _ FILE _ ;

#endif

///////////////////////////////////////////////////////

// CcntDoc

IMPLEMENT_DYNCREATE (CCntDoc, COleDocument) BEGIN_MESSAGE_MAP (CCntDoc, COleDocument)

// [2] AFX_MSG_MAP

// Используется стандартная реализация OLE- контейнера ON_UPDATE_COMMAHD_UI ( ID_EDIT_PASTE,

COleDocument: :OnUpdatePasteMenu) ON_OPDATE_COMMAMD_OI

(

ID_EDIT_PASTE_LINK ,

COleDocument: :OnUpdatePasteLinkMenu)

ON_UPDATE_COMMMJD_UI (

ID_OLE_EDIT_CONVERT ,

COleDocument: :OnUpdateObjectVerbMenu) ON_COMMAND

(ID_OLE_EDIT_CONVERT,

COleDocument: :OnEditConvert) ON_OPDATE_COMMAHD_OI

(ID_OLE_EDIT_LINKS,COleDocument:

:OnUpdateEditLinksMenu)

ON_COMMAND (ID_OLE_EDIT_LINKS ,

COleDocument: :OnEditLinks)

ON_OPDATE_COMMAND_UI_RftNGE ( ID_OLE_VERB_FIRST ,

ID_OLE_VERB_IAST,

COleDocument: :OnUpdateObjectVerbMenu) END_MESSAGE_MAP

0

///////////////////////////////////////////////////////

// Конструктор и деструктор класса CCntDoc '

CCntDoc: : CCntDoc ( ) {

// Включается поддержка составных файлов EnablecompoundFile ( ) ;

// Здесь добавьте код конструктора.

}

CCntDoc::-CCntDoc()

{

}

BOOLCCntDoc: : OnNewDocument( )

{

if ( ! COleDocument : : OnNewDocument ( ) ) return

FALSE;

// Здесь добавьте код повторной инициализации // (специфика SDI-приложений)

return TRUE;

}

///////////////////////////////////////////////////////

// Сериализация класса CcntDoc

void CCntDoc::Serialize(CArchive sar) { if (ar. IsStoringO )

{

// Здесь добавьте код сохранения.

}

else.

// здесь добавьте код загрузки.

}

// Вызов функции базового класса COleDocument // обеспечивает сериализацию объектов COleClientltem,

// содержащихся в документе контейнера.

COleDocument : : Serialize (ar ) ;

}

/////////////////////////////////////////////////////// // Диагностика класса CcntDoc tifdef _DEBUG

void CCntDoc::AssertValid() const

{

COleDocument::AssertValid(); }

void CCntDoc: : Dump (CDumpContext .&dc) const {

COleDocument: :Dump(dc) ; } #endif //_DEBUG

///////////////////////////////////////////////////////

// Другие функции класса CcntDoc

Обратите внимание на функцию EnableCompoundFile(), вызываемую в конструкторе. Эта функция осуществляет поддержку составных файлов, что позволяет сохранять документы с внедренными объектами в специальном структурированном формате.

4. Файл CNTVIEW.CPP

// CntView.cpp : реализация класса CCntView

//

#include "stdafx.h"

#include "Cnt.h"

#include "CntDoc.h"

#include "Cntrltem.h"

#include "CntView.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = _FILE_;

#endif

///////////////////////////////////////////////////////

// CcntView

IMPLEMENT DYNCREATE(CCntView, CView)

BEGIN_MESSAGE_MAP(CCntView, CView)

//[3]AFX_MSG_MAP //

Стандартные команды печати

ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)

ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,

CView::OnFilePrintPreview)

END_MESSAGE_MAP ()

///////////////////////////////////////////////////////

// Конструктор и деструктор класса CcntView

CCntView::CCntView() {

m_pSelection = NULL;

// здесь добавьте код конструктора.

}

CCntView::-CCntView()

}

BOOL CCntView::PreCreateWindow(CREATESTRUCT Ses) {

// Здесь можно модифицировать класс окна,

// изменяя поля структуры сз.

return CView::PreCreateWindow(cs); }

///////////////////////////////////////////////////////

// Отображение документа

void CCntView::OnDraw(CDC* pDC) {

CCn.tDoc* pDoc = GetDocument () ;

ASSERT VALID(pDoc);

// Здесь добавьте код для отображения собственных // данных.

// Должны отображаться все OLE-объекты,

// содержащиеся в документе.

// Выделенный элемент может быть нарисован // в произвольном месте.

// Этот код следует удалить в том случае, если // вы вводите собственный код рисования. Указанные // ниже координаты в точности соответствуют // координатам, возвращаемым объектом CCntCntrltem,

// что создает эффект непосредственного // редактирования.

// удалите следующий код, если реализуете // собственный код рисования.

if (m_pSelection == NULL)

{

POSITION pos = pDoc-X3etStartPosition() ;

m_pSelection = (CCntCntrltem*) pDoc-XSetNextClientltern(pos); > if (m_pSelection != NULL)

m_pSelection->Draw(pDC, CRect(10, 10,210,210));

}

void CCntView::OnlnitialUpdate() {

CView::OnlnitialUpdate() ;

// Удалите следующий код, если реализуете собственный // код инициализации.

m_pSelection = NULL;

// инициализация переменной, содержащей // указатель на выделенный объект }

///////////////////////////////////////////////////////

// Печать документа

BOOL CCntView; :OnPreparePrinting (CPrintlnf о * plnfo)

{

// Стандартные действия по подготовке к печати return DoPreparePrinting (plnfo) ;

}

void CCntView::OnBeginPrinting (CDC* /*pDC*/, CPrintlnfo* /*plnfo*/) {

// Добавьте код дополнительной инициализации // перед печатью.

}

void CCntView::OnEndPrinting(CDC* /*pDC*/, CPrintlnfo*

/*plnfo*/) ""

{

// Добавьте код очистки после печати.

}

void CCntView::OnDestroy()

{

// Деактивировать объект при удалении; это важно,

// если используется режим разделения окна просмотра.

CView::OnDestroy(); COleClientltem* pActiveltem = GetDocument()->

GetlnPlaceActiveltem(this); if (pActiveltem != NULL && pActive!tem->

GetActiveView() == this) {

pActive!tem->DeactivateO; ASSERT(GetDocument()-> GetlnPlaceActiveltem(this) == NULL);

}

}

///////////////////////////////////////////////////////

// Поддержка OLE- клиентов

BOOL CCntView;:IsSelected(const CObject* pDocItem) const

{

// Представленная ниже реализация подходит, если // выделенными являются только объекты CCntCntrltem.

// В противном случае данный код следует заменить.

// Реализуйте функцию, которая проверяет тип // выделенного объекта.

return pDocItem == m_pSelection; } void CCntView::OnlnsertObject () (

// Вызов стандартного диалогового окна InsertObject // для получения информации о новом объекте CCntCntrltem.

COlelnsertDialog dig;

if (dig.DoModaK) != IDOK) return;

BeginWaitCursor() ;

CCntCntrltem* pltem = NULL;

TRY

{

// Создаем новый объект, связанный с этим документом.

CCntDoc* pDoc = GetDocument ();

ASSERT_VALID(pDoc);

pltem = new CCntCntrltem(pDoc);

ASSERT_VALID(pltem);

// Инициализация объекта на основании данных,

// полученных из диалогового окна.

if (!dig.Createltem(pltem))

AfxThrowMemoryException();

// Подойдет исключение любого типа

ASSERT_VALID(pltem);

// Если объект был выбран из списка классов,

// а не загружен из файла, запускаем сервер // для редактирования объекта,

if (dig.GetSelectionType() ==

COlelnsertDialog::createNew!tern) p!tem->DoVerb(OLEIVERB_SHOW, this);

ASSERT_VALID(pltem);

// Последний введенный объект выделяется.

// Введите код, соответствующий требованиям // вашего приложения.

m_pSelection = pltem;

// Указатель устанавливается на // последний введенный объект

pDoc->UpdateAHViews (NULL) ;

CATCH(CException, e) if (pltem != NULL)

ASSERT_VALID(pltem) ; p!tem->Delete() ;

AfxMessageBox(IDP_FAILED_TO_CREATE); END_CATCH EndWaitCursor(); >

// Следующий обработчик позволяет с помощью клавиатуры // прерывать сеанс непосредственного редактирования.

// Инициируется это контейнером, а не сервером,

voidCCntView::OnCancelEditCntr()

// Редактируемый объект закрывается.

COleClientltem* pActiveltem= GetDocument()-> GetlnPlaceActiveltem(this); if (pActiveltem != NULL) pActive!tem->Close();

ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL);

}

// Обработчики OnSetFocusn OnSize требуются контейнеру // в случае непосредственного редактирования объекта .

void CCntView: :OnSetFocus (CWnd* pOldWnd)

{

COleClientltem* pActiveltem = GetDocument ( ) -> GetlnPlaceActiveltem(this) ; if (pActiveltem != NULL &&

pActive!tem->GetItemState () ==

COleClientltem: :activeUIState) {

// Фокус необходимо установить на объект, если он // находится в той же области просмотра.

CWnd* pWnd = pActiveltem- >GetInPlaceWindow( ); if (pWnd != NULL)

{

pWnd->SetFocus( ) ; // метод SetFocus базового класса

// не вызывается

return;

}}

CView:tOnSetFocus(pOldWnd); }

void CCntView: rOnSize (UINT nType, int ex, int cy)

{ * '

CView: :OnSize (nType, ex, cy) ;

COleClientltem* pActiveltem = GetDocument ()-> GetlnPlaceActiveltem(this) ; if (pActiveltem != NULL)

pActiveItem->SetItemRects () ;

}

/////////////////////////////////////////////////

// Диагностика класса CcntView tifdef _DEBUG

void CCntView::AssertValid() const

{

CView::AssertValid(); }

void CCntView::Dump(CDumpContext Sdc) const CView::Dump(dc); }

CCntDoc* CCntView::GetDocument() // отладочная версия

_ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS

(CCntDoc))); return (CCntDoc*)m_pDocument;

#endlf

//_DEBUG

////////////////////////////////////////////////

// Обработчики сообщений класса CCntView

Чтобы приложение могло отображать внедренные объекты, были внесены изменения в функцию OnDraw( ). Обратите внимание на такой фрагмент:

if (m_pSelection !=NULL)

m_pSeleotion->Draw(pDC, CRectdO, 10,210, 210));

}

По умолчанию объект размещается в окне приложения в заранее заданной области, которая определяется конструктором CRect( ). Указанные координаты можно изменить вручную.

В файл были также добавлены функции ОЫпШаШрсЫеО, ^екаесЮ, ЫшегЮ^ес^), ОпСапсеШсШСгйгО, Оп8е1РосиБОИ Оп8ке(). В частности, функция Оп1п8егЮЬ]ес1() вызывает стандартное диалоговое окно класса СОЫшейОт^, предназначенное для вставки объектов.

5. Файл CNTRITEM.CPP

Файл CNTRITEM.CPP, листинг которого приведен ниже, содержит реализацию класса CCntCntrltem.

// Cntrltem.срр: реализация класса CCntCntrltem

//

#include "stdafx.h"

#include "Cnt.h"

#include "CntDoc.h"

#include "CntView.h"

#include "Cntrltem.h"

#ifdef _DEBUG

#define new DEBUG_NEW

tundef THIS_FILE

static char THIS_FILE[] = _ FILE _ ;

#endif

//////////////////////////////////////////////////

// CcntCntrltem

IMPLEMENT_SERIAL (CCntCntrltem, COleClientltem, 0) CCntCntrltem: : CCntCntrltem (CCntDoc* pContainer)

: COleClientltem (pContainer) {

// здесь добавьте код конструктора.

CCntCntrltera::~CCntCntrItem () {

// здесь добавьте код очистки.

void CCntCntrltem::OnChange(OLE_NOTIFICATION nCode, DWORD dwParam)

ASSERT_VALID(this); COleClientltem::OnChange(nCode, dwParam);

// Редактируемому объекту посылается уведомление // OnChange,свидетельствующее об изменении его // состояния или внешнего вида.

// Обозначьте рабочую область объекта как // недействительную путем вызова функции // UpdateAllViews.

GetDocument()->UpdateAllViews(NULL);

BOOL CCntCntrltem::OnChangeltemPosition(const CRect SrectPos)

ASSERT_VALID(this);

// В процессе непосредственного редактирования // данная функция вызывается сервером для изменения // позиции окна редактирования.

// По умолчанию вызывается метод базового класса,

// который, в свою очередь, задействует функцию

// COleClientltem::SetltemRects

// для перемещения объекта в новую позицию.

if ((COleClientltem::OnChangeltemPosition (rectPos)) return FALSE;

// обновите всю кэшированную информацию,

// связанную с размерами объекта.

return TRUE; )

void CCntCntrltem::OnGetltemPosition(CRect SrPosition) ASSERT_VALID(this);

// В процессе непосредственного редактирования // данная функция позволяет определить координаты // области, занимаемой объектом.

// По умолчанию заданы фиксированные координаты.

// Запишите правильные координаты (в пикселях)

// в переменную rPosition.

rPosition.SetRect(10, 10,210, 210);

}

void CCntCntrltem: :OnActivate() {

// Допускается только один сеанс редактирования // в окне приложения.

CCntView* pView = GetActiveView ( ) ;

ASSERT_VALID(pView) ;

COleClientltem* pltem = GetDocument ( ) -> GetlnPlaceActiveltem(pView) ; if (pltem !- NULL ss-pltem != this) p!tem->Close () ;

COleClientltem: : OnAct ivate ( ) ;

}

void CCntCntrltem: :OnDeactivateUI (BOOL bUndoable) {

COleClientltem: :OnDeactivateUI (bUndoable) ;

// Скрывает объект, если он был активизирован // обычным способом

DWORDdwMisc = 0;

m_lpObject->GetMiscStatus (GetDrawAspect () , SdwMisc) ;

if (dwMisc & OLEMISC_INSIDEOUT)

DoVerb (OLEIVERB_HIDE, NULL) ;

}

void CCntCntrltem: : Serialize (CArchive Sar) {

ASSERT_VALID(this) ;

// Вызов функции базового класса для считывания данных, // связанных с объектом COleClientltem. При этом // инициализируется указатель m_j>Document,

// возвращаемый функцией CCntCntrltem: :GetDocument,

// поэтому функцию базового класса // лучше вызывать вначале.

COleClientltem: : Serialize (ar);

// Теперь сериализуем данные, специфичные для объекта

// CCntCntrltem.

if (ar.IsStoringO )

{

// здесь добавьте код сохранения.

else {

// здесь добавьте код загрузки.

}

}

///////////////////////////////////////////////

//Диагностика класса CcntCntrltem #if<="" p="">

void CCntCntrltem: :AssertValid () const

COleClientltem::SssertValidO;

}

void CCntCntrltem: :Dump(CDumpContext' &dc) const

COleClientltem::Dump(dc);

#endif

Основное назначение этого файла состоит в отслеживании координат и размеров области, занимаемой внедренным объектом. Обратите внимание на фрагмент, выделенный полужирным шрифтом. Именно здесь задаются координаты, о которых говорилось при рассмотрении файла CNTVIEW.CPP.

o [1] AFX_DATA (CAboutDlg) enum { IDD = IDD_ABOUTBOX } ;

/ / } }AFX_DATA

// Виртуальные функции, сгенерированные // мастером ClassWizard // { {AFX_VIRTUAL (CAboutDlg)

protected:

virtual void DoDataExchange (CDataExchange* pDX) ;

// })AFX_VIRTUAL

// Реализация

protected:

// { { AFX_MSG (CAboutDlg)

// Обработчики сообщений отсутствуют

//})AFXMSG

DECLARE_MESSAGE_MAP ()

};

CAboutDlg: : CAboutDlg () : CDialog (CAboutDlg: : IDD)

{

// {fAFX_DATA_INIT (CAboutDlg)

/ / } }AFX DATA IN IT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX);

// { {AFX_DATA_MAP (CAboutDlg)

// } } AFX_DATA_MAP }

BEGIN_MESSAGE_MAP (CAboutDlg, CDialog)

// { {AFX_MSG_MAP (CAboutDlg)

// Обработчики сообщений отсутствуют

/ / } }AFX MSG MAP END MESSAGE MAP ()

// Функция, управляющая выводом окна About void ССп tApp: : OnAppAbou t ()

{

CAboutDlg aboutDlg; aboutDlg. DoModal () ; }

// Другие функции класса CCntApp

Данный листинг содержит один фрагмент, заслуживающий особого внимания. В OLE используется концепция непосредственного редактирования (in-placeediting). Это означает, что после двойного щелчка на объекте, внедренном в документ контейнера, такой как наш, строка меню и панели инструментов соответствующего OLE-сервера замещают меню и панели инструментов контейнера. Например, если в документ приложения Cnt будет внедрена электронная таблица Excel, то после двойного щелчка на ней строка меню и панели инструментов программы Excel появятся в окне программы Cnt. Смена меню происходит автоматически и обрабатывается библиотекой MFC с помощью средств OLE. Этот процесс становится возможным благодаря тому, что в приложение добавляется два ресурса меню: idr mainfraimeH idr cntr inplace (имя последнего идентификатора уникально для данного приложения). По умолчанию отображается меню IDR MAINFRAIME. Но когда внедренный объект активизируется для непосредственного редактирования, загружается меню idr cntr in-PLACE.

2. Файл MAINFRM.CPP

// MainFrm.cpp: реализация класса CMainFrame //

#include "stdafx.h"

#include "Cnt.h"

#include "MainFrm.h" tifdef _DEBUG #define new DEBUG_NEW tundef THIS_FILE

Static char THIS_FILE[] = _FILE_;

#endif

///////////////////////////////////////////////////////

// CmainFrame

IMPLEMENT_DYNCREATE (CMainFrame, CFrameWnd) i BEGIN_MESSAGE_MAP (CMainFrame, CFrameWnd)

//{{AFX_MSG_MAP (CMainFrame)

// ПРИМЕЧАНИЕ: мастер классов будет добавлять // и удалять здесь макросы схемы сообщений.

// НЕ РЕДАКТИРУЙТЕ то,что здесь находится.

//

o [2] AFX_MSG_MAP (CCntDoc)

// ПРИМЕЧАНИЕ: мастер классов будет добавлять // и удалять здесь макросы схемы сообщений.

// НЕ РЕДАКТИРУЙТЕ то, что здесь находится.

//

o [3] AFX_MSG_MAP(CCntView)

// ПРИМЕЧАНИЕ: мастер классов будет добавлять // и удалять здесь макросы схемы сообщений.

// НЕ РЕДАКТИРУЙТЕ то, что здесь находится.

ON_WM_DESTROY()

ON_WM_SETFOCUS() ON_WM_SIZE()

ON_COMMAND (ID_OLE_INSERT_NEW, OnlnsertObject) ON_COMMAND(ID_CANCEL_EDIT_CNTR, OnCancelEditCntr)

//

 


Дата добавления: 2020-04-08; просмотров: 152; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!