Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Microsoft Visual C++ ΠΈ MFC. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Windows 95 ΠΈ Windows NT. Π§Π°ΡΡ‚ΡŒ 2Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 10

Автор АлСксандр Π€Ρ€ΠΎΠ»ΠΎΠ²

 // Если lHint Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, выполняСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

 if (lHint==0L) CView::OnUpdate(pSender, lHint, pHint);


 // Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ элСмСнт Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

 else {

  // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ контСкст отобраТСния ΠΎΠΊΠ½Π° просмотра

  CClientDC dc(this);


  // ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ элСмСнтом массива

  // pointFigCenter с индСксом lHint

  dc.Rectangle(pDoc->pointFigCenter[lHint].x-10, pDoc->pointFigCenter[lHint].y-10, pDoc->pointFigCenter[lHint].x+10, pDoc->pointFigCenter[lHint].y+10);

 }

}

ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ запуститС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ нСсколько ΠΎΠΊΠΎΠ½ просмотра ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС эти ΠΎΠΊΠ½Π° синхронизированы. ИзмСнСния, вносимыС Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½ΠΎ ΠΎΠΊΠ½ΠΎ просмотра автоматичСски ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΊΠ½Π°Ρ…. ΠŸΡ€ΠΈ этом ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ происходит быстрСС, Ρ‡Π΅ΠΌ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π΅ использовали возмоТности ΠΌΠ΅Ρ‚ΠΎΠ΄Π° OnUpdate.

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСпосрСдствСнно ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° OnUpdate. Однако Π»ΡƒΡ‡ΡˆΠ΅ Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ OnUpdate Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ OnDraw ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΊΠ½Π° просмотра, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ. Для этого ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ CWnd::InvalidateRect.

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€

НСкоторыС ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ прилоТСния ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ прилоТСния являСтся сама срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Visual C++. Π’ Π½Π΅ΠΉ Π²Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ рСдактирования исходного тСкста прилоТСния ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рСсурсов. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ систСм управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π’Π°ΠΊ FoxPro ΠΈ Access ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ поля Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ для отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· этой Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π Π°Π½Π΅Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ графичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (окруТности, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ ΠΈ Ρ‚. Π΄.) ΠΈ Ρ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ приступим ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ слоТного прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π΄Π²ΡƒΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² – графичСскими ΠΈ тСкстовыми.

Для упрощСния Π²ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌΠΈ графичСскими Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ – Multi.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ класса Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ класса ΠΎΠΊΠ½Π° просмотра

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄Π²Π° Π½ΠΎΠ²Ρ‹Ρ… класса – класс Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ класс ΠΎΠΊΠ½Π° отобраТСния для хранСния ΠΈ отобраТСния Π½Π° экранС тСкстовой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Для создания Π½ΠΎΠ²Ρ‹Ρ… классов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ MFC ClassWizard .

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ панСль ClassWizard ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Add Class. ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ новая диалоговая панСль Create New Class. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π² ΠΏΠΎΠ»Π΅ Name имя Π½ΠΎΠ²ΠΎΠ³ΠΎ класса – CEditorDoc, Π° Π² ΠΏΠΎΠ»Π΅ Base Class Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ имя Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CDocument. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Create. ClassWizard создаст класс CEditorDoc, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ размСстит Π² Ρ„Π°ΠΉΠ»Π΅ CEditorDoc.h, Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса Π² Ρ„Π°ΠΉΠ»Π΅ CEditorDoc.cpp.

НС закрывая ClassWizard, создайтС класс ΠΎΠΊΠ½Π° просмотра тСкстового Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Add Class. Π’ ΠΏΠΎΠ»Π΅ Name Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ Create New Class Π²Π²Π΅Π΄ΠΈΡ‚Π΅ имя класса ΠΎΠΊΠ½Π° просмотра CEditorView, Π° Π² ΠΏΠΎΠ»Π΅ Base Class Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ имя Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CEditView. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Create. ClassWizard создаст класс CEditorView, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ размСстит Π² Ρ„Π°ΠΉΠ»Π΅ CEditorView.h, Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса Π² Ρ„Π°ΠΉΠ»Π΅ CEditorView.cpp.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ тСкстовый Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π½Π° дискС. Когда ClassWizard создаСт для вас класс Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, наслСдованный ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса CDocument, ΠΎΠ½ сразу создаСт шаблон ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Serialize. К соТалСнию, этот шаблон придСтся ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ.

ΠœΡ‹ ΡƒΠΆΠ΅ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ класс CEditView Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠ½ΠΈΠ³Π΅, посвящСнной MFC, ΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса сами хранят Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для записи ΠΈ чтСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Serialize класса Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса ΠΎΠΊΠ½Π° просмотра. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Serialize ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

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

// ΠœΠ΅Ρ‚ΠΎΠ΄ класса Serialize CEditorDoc


void CEditorDoc::Serialize(CArchive& ar) {

 ((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);

}

На этом рСализация классов для хранСния ΠΈ отобраТСния тСкстового Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π° ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ самому интСрСсному – ΠΊ созданию шаблона Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ шаблона тСкстовых Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ всС характСристики Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Они Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ классС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, классС ΠΎΠΊΠ½Π° просмотра, классС ΠΎΠΊΠ½Π° Ρ€Π°ΠΌΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ рСсурсах, связанных с Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ прилоТСния Π²ΠΎ врСмя Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ InitInstance Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ класса прилоТСния CMultiApp. Π’ Π½Π΅ΠΌ создаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса CMultiDocTemplate, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт графичСский Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈ срСдства для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ.

Π’Π°ΠΊ ΠΊΠ°ΠΊ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с графичСскими, Π½ΠΎ ΠΈ с тСкстовыми Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ шаблона Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ тСкстовый Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Класс тСкстового Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° называСтся CEditorDoc, класс ΠΎΠΊΠ½Π° для Π΅Π³ΠΎ просмотра CEditorView. Π’ качСствС ΠΎΠΊΠ½Π° Ρ€Π°ΠΌΠΊΠΈ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ класс CChildFrame. НиТС прСдставлСн ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° InitInstance:

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

// CMultiApp initialization


BOOL CMultiApp::InitInstance() {

 // ...

 // РСгистрируСм ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² прилоТСния


 CMultiDocTemplate* pDocTemplate;

 pDocTemplate = new CMultiDocTemplate(IDR_MULTITYPE, RUNTIME_CLASS(CMultiDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CMultiView));

 AddDocTemplate(pDocTemplate);


 pDocTemplate = new CMultiDocTemplate(IDR_EDITORTYPE, RUNTIME_CLASS(CEditorDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CEditorView));

 AddDocTemplate(pDocTemplate);


 // ...


 return TRUE;

}

ΠŸΡ€ΠΈ создании шаблона Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² указываСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт мСню, ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠœΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ для шаблона тСкстового Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ IDR_EDITORTYPE. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ нСсколько Π·Π°Π±Π΅ΠΆΠ°Π»ΠΈ Π²ΠΏΠ΅Ρ€Π΅Π΄, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. ΠœΡ‹ вСрнСмся ΠΊ рСсурсам тСкстового Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ созданный шаблон тСкстовых Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ списку шаблонов Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² прилоТСния, Π½Π°Π΄ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ AddDocTemplate, ΡƒΠΊΠ°Π·Π°Π² Π΅ΠΌΡƒ адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° шаблона.

РСсурсы тСкстовых Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ рСсурсов прилоТСния. Π’Π°ΠΌ трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ мСню, ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ строковый рСсурс с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ IDR_EDITORTYPE. Π‘Π°ΠΌΡ‹ΠΉ простой ΠΏΡƒΡ‚ΡŒ для этого Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° рСсурсов, относящихся ΠΊ графичСским Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ этих рСсурсов IDR_MULTITYPE. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСсурс, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΉ вас рСсурс ΠΈΠ· ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΠ±ΠΌΠ΅Π½Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ clipboard, Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° IDR_EDITORTYPE.

На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния скопированныС мСню ΠΈ ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π±Π΅Π· измСнСния. ΠŸΠΎΡ‚ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ.

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ рСсурс IDR_EDITORTYPE, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сразу. Для графичСского Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° строковый рСсурс IDR_MULTITYPE выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

\nGraph\nGraph\nGraph Files (*.LIS)\n.LIS\nGraph.Document\nGraph Document

Π§Ρ‚ΠΎΠ±Ρ‹ тСкстовый Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ΅Π» Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² принятоС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ строковый рСсурс с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ IDR_EDITORTYPE:

\nText\nTexti\nTexti Files (*.TXT)\n.TXT\nText.Document\nText Document

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ

ВсС, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ запуститС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ выполняСмый Ρ„Π°ΠΉΠ». На экранС появится диалоговая панСль New, прСдставлСнная Π½Π° рисункС 1.15.

Рис. 1.15. Π’Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°


Π’ спискС New этой ΠΏΠ°Π½Π΅Π»ΠΈ пСрСчислСны Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² – тСкстовыми ΠΈ графичСскими, Ρ‚ΠΎ этот список содСрТит всСго Π΄Π²Π° элСмСнта. Если Π² послСдствии Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΈΡ… названия Ρ‚Π°ΠΊΠΆΠ΅ появятся Π² этой ΠΏΠ°Π½Π΅Π»ΠΈ.

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ· списка Ρ‚ΠΈΠΏ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ OK. ΠžΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ΡΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ прилоТСния ΠΈ ΠΎΠΊΠ½ΠΎ MDI с Π½ΠΎΠ²Ρ‹ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Когда Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‡Π΅Ρ€Π΅Π· мСню (строка New мСню File), ΠΈΠ»ΠΈ панСль управлСния (ΠΊΠ½ΠΎΠΏΠΊΠ° ), Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Для этого Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ диалоговая панСль New, описанная Π²Ρ‹ΡˆΠ΅.

ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ нСсколько Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΎΠΊΠΎΠ½ просмотра. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ названия ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

2. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π°