Скачать презентацию Windows Forms — GUI Стандартни диалогови кутии Скачать презентацию Windows Forms — GUI Стандартни диалогови кутии

476fc66b6e37a498ac7d2d99bd097301.ppt

  • Количество слайдов: 82

Windows Forms - GUI Windows Forms - GUI

Стандартни диалогови кутии l Класът Message. Box позволява извеждане на стандартни диалогови кутии: l Стандартни диалогови кутии l Класът Message. Box позволява извеждане на стандартни диалогови кутии: l l съобщения към потребителя въпросителни диалози l Примери: Message. Box. Show("Няма връзка с Интернет. ", "Предупреждение"); bool confirmed = Message. Box. Show("Наистина ли " + "ще изтриете това? ", "Въпрос", Message. Box. Buttons. Yes. No, Message. Box. Icon. Question) == Dialog. Result. Yes;

Извикване на диалогови кутии l Потребителските диалогови кутии се извикват така: Dialog. Result result Извикване на диалогови кутии l Потребителските диалогови кутии се извикват така: Dialog. Result result = dialog. Show. Dialog(); l l l Show. Dialog() показва модално диалога Типът Dialog. Result съдържа резултата (OK, Yes, No, Cancel и др. ) Задаване на Dialog. Result: l l Автоматично – чрез свойството Dialog. Result на бутоните Ръчно – преди затваряне на диалога чрез свойството му Dialog. Result

Диалогови кутии – пример В Main. Form класа: private void Button. Call. Dialog_Click( object Диалогови кутии – пример В Main. Form класа: private void Button. Call. Dialog_Click( object sender, System. Event. Args e) { Dialog. Form dialog = new Dialog. Form(); if (dialog. Show. Dialog() == Dialog. Result. OK) { string user. Name = dialog. User. Name; Message. Box. Show("You entered: " + user. Name); } else { Message. Box. Show("You canceled the dialog. "); } } В Dialog. Form класа: public string User. Name { get { return Text. Box. Name. Text; } }

Други Windows Forms контроли l Check. Box – – кутия за избор в стил Други Windows Forms контроли l Check. Box – – кутия за избор в стил "да/не". По-важни свойства: l l Checked – задава дали е избрана Radio. Button – – контрола за алтернативен избор Checked – задава дали е избрана l Checked. Changed – активира се при промяна на Checked свойството l Използва се в групи: l l Само един Radio. Button е избран в даден момент l Поставят се в Group. Box, Panel или Tab. Page

Toolbox and Controls Toolbox and Controls

Design Time Design Time

Open Dialog Open Dialog

Code – Open Dialog dlg. Result = dlg. Open. File. Show. Dialog(); if (dlg. Code – Open Dialog dlg. Result = dlg. Open. File. Show. Dialog(); if (dlg. Result == Dialog. Result. Cancel) return; try { m_str. File. Name = dlg. Open. File. Name; Stream. Reader sr = new Stream. Reader(m_str. File. Name); txt. Body. Text = sr. Read. To. End(); sr. Close(); m_b. Modified = false; } catch (Exception err) { Message. Box. Show(err. Message, "Error", Message. Box. Buttons. OK, Message. Box. Icon. Error); }

Save Dialog Save Dialog

Code – Save Dialog dlg. Save. File. Name = Code – Save Dialog dlg. Save. File. Name = "mydoc" + m_int. Doc. Number. To. String() + ". txt"; dlg. Result = dlg. Save. File. Show. Dialog(); if (dlg. Result == Dialog. Result. Cancel) return; try { m_str. File. Name = dlg. Save. File. Name; m_sw = new Stream. Writer(m_str. File. Name); m_sw. Write(txt. Body. Text); m_sw. Close(); m_int. Doc. Number++; m_b. Modified = false; this. Text = "C# Simple Notepad: " + m_str. File. Name; } catch (Exception err) { Message. Box. Show(err. Message, "Error", Message. Box. Buttons. OK, Message. Box. Icon. Error); }

Color Dialog Color Dialog

Code – Color Dialog if (color. Dialog 1. Show. Dialog() == Dialog. Result. OK) Code – Color Dialog if (color. Dialog 1. Show. Dialog() == Dialog. Result. OK) { txt. Body. Back. Color = color. Dialog 1. Color; }

Font Dialog Font Dialog

Code – Font Dialog if (dlg. Font. Show. Dialog() == Dialog. Result. Cancel) return; Code – Font Dialog if (dlg. Font. Show. Dialog() == Dialog. Result. Cancel) return; Font. Family fm. Font. Name = dlg. Font. Family; float f. Font. Size = dlg. Font. Size; Font. Style fs. Style = dlg. Font. Style; Font font; try { font = new Font(fm. Font. Name, f. Font. Size, txt. Body. Font. Style ^ fs. Style); txt. Body. Font = font; } catch (Argument. Exception) { return; }

Open New Form Open New Form

Code – Show Form 2 frm. New = new Form 2(); frm. New. Show. Code – Show Form 2 frm. New = new Form 2(); frm. New. Show. Dialog(); ( parameter from Form 2 to Form 1) string my. String = frm. New. My. String; label 1. Text = my. String;

Form 2 // parameter l public partial class Form 2 : Form { private Form 2 // parameter l public partial class Form 2 : Form { private string _My. String; public string My. String { get { return _My. String; } }. . . . // close form _My. String = text. Box 1. Text; Close (); // Application. Exit(); //- Close Application

Други Windows Forms контроли l Picture. Box – изобразява картинки. По-важни свойства: Image – Други Windows Forms контроли l Picture. Box – изобразява картинки. По-важни свойства: Image – задава картинката l Size. Mode – задава дали картинката да се разшири / намали или центрира l Panel – представлява контейнер, който съдържа група други контроли l Tab. Control, Tab. Page – осигуряват ползване на табове l

Други Windows Forms контроли l List. Box – изобразява списък с низове. По-важни свойства: Други Windows Forms контроли l List. Box – изобразява списък с низове. По-важни свойства: Items – задава списъка l Selection. Mode – разрешава / забранява селектиране на няколко елемента едновременно l Selected. Index, Selected. Indices, Selected. Items – връща избрания елемент (или избраните елементи) l l Checked. List. Box – списък от възможности за избор "да/не": Items – задава възможностите l Checked. Items – връща избраните l

Демонстрация #5 l Работа с някои контроли Демонстрация #5 l Работа с някои контроли

Други Windows Forms контроли l Combo. Box – кутия за редакция на текст с Други Windows Forms контроли l Combo. Box – кутия за редакция на текст с възможност за drop-down алтернативен избор. По-важни свойства: Text – въведения текст l Items – възможни стойности l Drop. Down. Style – задава стил – дали само се избира стойност от списъка или може да се въвежда друга стойност l l Tree. View – изобразява дървовидни данни. Основни свойства: Nodes – съдържа дървото (списък от Tree. Node обекти) l Selected. Node – избрания възел l

Други Windows Forms контроли l Link. Label – – препратка (hyperlink): Text – съдържание Други Windows Forms контроли l Link. Label – – препратка (hyperlink): Text – съдържание на връзката l Link. Clicked – активира се при щракване върху препратката l l Rich. Text. Box – кутия за редакция на текст с форматиране (Rich Text Format) Load. File, Save. File – зарежда/записва RTF l Selection. Font, Selection. Color, Selection. Alignment – задават шрифт, цвят и подравняване на избрания текст l

Менюта l Main. Menu – – падащо меню l Съдържа списък от Menu. Item Менюта l Main. Menu – – падащо меню l Съдържа списък от Menu. Item елементи l Menu. Item – елемент от меню l Text – заглавие на елемента, например “&New” или “Op&en…” или “–” l Short. Cut – кратък клавиш l Click – събитие “избиране” l Context. Menu – контекстно меню (popup меню)

Ленти с инструменти l Tool. Bar – лента с инструменти (с бутони) – l Ленти с инструменти l Tool. Bar – лента с инструменти (с бутони) – l Buttons – съдържа списък от Tool. Bar. Button елементи l Image. List – задава картинките за бутоните l Button. Click – активира се при натискане на бутон l подава се Tool. Bar. Button. Click. Event. Args с информация кой бутон е бил натиснат Tool. Bar. Button – бутон в лентата l Image. List – списък с картинки l

Статус ленти l Status. Bar – – лента за състоянието l Panels – съдържа Статус ленти l Status. Bar – – лента за състоянието l Panels – съдържа секциите на лентата l Show. Panels – включва / изключва показване на панелите l Status. Bar. Panel – секция в лентата l Text – съдържание на панела l Icon – икона на панела

Диалог за избор на файл l Open. File. Dialog – диалог за избор на Диалог за избор на файл l Open. File. Dialog – диалог за избор на файл (при отваряне) l Title – заглавие на диалога l Initial. Directory – начална директория l Filter – задава възможните файлови разширения l Filter. Index – задава активния филтър l Multiselect – избор на много файлове l File. Name, File. Names – избрания файл l Save. File. Dialog – диалог за избор на файл (при записване)

Файлов диалог – пример private void Button. Load. File_Click( object sender, System. Event. Args Файлов диалог – пример private void Button. Load. File_Click( object sender, System. Event. Args e) { Open. File. Dialog open. File. Dialog = new open. File. Dialog. Filter = "Text files "Log files (*. log)|*. log"; open. File. Dialog. Title = "Choose text Open. File. Dialog(); (*. txt)|*. txt|" + file"; if (open. File. Dialog. Show. Dialog() == Dialog. Result. OK) { string file. Name = open. File. Dialog. File. Name; using (Stream. Reader reader = File. Open. Text(file. Name)) { string file. Contents = reader. Read. To. End(); text. Box. Text = file. Contents; } } }

Демонстрация #6 l Работа с файлов диалог Демонстрация #6 l Работа с файлов диалог

MDI приложения MDI (Multiple Document Interface) приложенията поддържат работа с няколко документа едновременно l MDI приложения MDI (Multiple Document Interface) приложенията поддържат работа с няколко документа едновременно l MDI контейнери (MDI parents) l Съдържат други форми l Задава им се Is. Mdi. Container = true l Обикновено имат меню Window за смяна на активната форма (Mdi. List = true) l l MDI формите (MDI children) Съдържат се в контейнер-формата l Задава им се Mdi. Parent = <контейнер> l

Демонстрация #7 l Мултидокументов текстов редактор Демонстрация #7 l Мултидокументов текстов редактор

Валидация на данни Валидацията е необходима, когато в дадена контрола трябва да се допуска Валидация на данни Валидацията е необходима, когато в дадена контрола трябва да се допуска въвеждане само на коректни данни l В Windows Forms има стандартни средства за валидация: l l Validating – събитие за валидация на данните в класа Control l Подава се параметър от тип Cancel. Event. Args l Ако се зададе Cancel=true – не пуска потребителя да напусне контролата l Error. Provider – отбелязва графично

Валидация на данни – пример private Text. Box 1; private Error. Provider error. Provider; Валидация на данни – пример private Text. Box 1; private Error. Provider error. Provider; . . . private void Text. Box 1_Validating(object sender, System. Component. Model. Cancel. Event. Args e) { try { Int 32. Parse(Text. Box 1. Text); error. Provider. Set. Error(Text. Box 1, ""); } catch (Format. Exception) { error. Provider. Set. Error( Text. Box 1, "Integer number expected!"); e. Cancel = true; } }

Демонстрация #8 l Валидация на данни Демонстрация #8 l Валидация на данни

Свързване на данни l Свързването на данните (Data Binding) l l l Осигурява автоматично Свързване на данни l Свързването на данните (Data Binding) l l l Осигурява автоматично прехвърляне на данни между контроли и източници на данни Например: свързване на масив съдържащ имена на градове с Combo. Box контрола Източници на данни l l IList – масиви и колекции IBinding. List – поддържа се от Data. View l поддържа нотификация за промяна l Контроли, поддържащи data binding l Всички Windows Forms контроли l Text. Box, Combo. Box, List. Box, Data. Grid

Свързване на данни l Видове свързване l Просто свързване (simple binding) l Свързване на Свързване на данни l Видове свързване l Просто свързване (simple binding) l Свързване на контрола с единичен обект l Свързване на контрола с единичен (текущ) елемент от списък l Например: Text. Box и Check. Box l Сложно свързване (complex binding) l Свързване на списъчна контрола със списък l Например: List. Box, Combo. Box, Data. Grid l Поддържа се текущо избран елемент (активен) от списъка

Свързването е еднопосочно! l l Промяна на дадено свързано свойство от дадена контрола променя Свързването е еднопосочно! l l Промяна на дадено свързано свойство от дадена контрола променя данните в източника, към който то е свързано Обратното не е вярно! l l При промяна на източника на данни свързаните към него контроли не си променят свойствата След промяна на данните в източника на данни за отразяване на промените в свързаните с него контроли се прави: 1. Премахване (изтриване) на свързването

Просто свързване l l Свързване на контрола към обект При промяна на Text. Box Просто свързване l l Свързване на контрола към обект При промяна на Text. Box 1. Text се променя class Customer свързаният обект { } private string m. Name; public string Name { get { return m. Name; } set { m. Name = value; } } Customer cust = new Customer(); cust. Name = "Бай Иван"; Text. Box 1. Data. Bindings. Add( new Binding("Text", cust, "Name"));

Демонстрация #9 l Свързване на контрола към обект Демонстрация #9 l Свързване на контрола към обект

Просто свързване l Свързване на контрола към списък string[] towns = { Просто свързване l Свързване на контрола към списък string[] towns = {"София", "Пловдив", "Варна"}; Text. Box. Towns. Data. Bindings. Add( new Binding("Text", towns, "")); l Свързване на контрола към таблица // Имаме Data. Set ds с таблица Towns с колони id и name: Data. Table towns = new Data. Table("Towns"); towns. Columns. Add(new Data. Column("id", typeof(int))); towns. Columns. Add(new Data. Column("name", typeof(string))); Data. Set ds = new Data. Set(); ds. Tables. Add(towns); Text. Box. Towns. Data. Bindings. Add( new Binding("Text", ds, "Towns. name"));

Просто свързване с VS. NET l Свързването може да става и по време на Просто свързване с VS. NET l Свързването може да става и по време на дизайн с VS. NET (ако използваме за източник Data. Set)

Binding. Context l Формата пази информация за свързаните контроли в своя Binding. Context обект Binding. Context l Формата пази информация за свързаните контроли в своя Binding. Context обект l l Currency. Manager – за контроли свързани към списък. Съдържа позицията в списъка Property. Manager – за контроли свързани към Currency Array Manager обект Form Binding Context Currency Manager Collection Currency Manager Data. Table Property Manager Object

Навигация с Currency. Manager l l Currency. Manager класът пази текущата позиция в списъка Навигация с Currency. Manager l l Currency. Manager класът пази текущата позиция в списъка – източник на данни l Position – съдържа позицията l Count – съдържа размера на списъка Навигация по източника на данни l Извличане на Currency. Manager обекта: Currency. Manager cm = (Currency. Manager) text. Box 1. Data. Bindings["Text"]. Binding. Manager. Base ; // Може и така: Currency. Manager cm = (Currency. Manager) form 1. Binding. Context[data. Table. Customers]; l Навигация по списъка: cm. Position++;

Демонстрация #10 l Свързване на контрола към списък и навигация по списъка Демонстрация #10 l Свързване на контрола към списък и навигация по списъка

Сложно свързване l Свързване на контрола към списък l Използва се при списъчни контроли: Сложно свързване l Свързване на контрола към списък l Използва се при списъчни контроли: l List. Box, Combo. Box и др. l Задават се свойствата: l Data. Source – списък с данните l Display. Member – път до полето, което да се визуализира l Value. Member – път до полето, от което се получава резултата l Пример: combo. Box 1. Data. Source = data. Set. Countries; combo. Box 1. Display. Member = "Countries. Country. Code"; combo. Box 1. Value. Member = "Countries. Name";

Демонстрация #11 l Сложно свързване на контрола към списък Демонстрация #11 l Сложно свързване на контрола към списък

Сложно свързване с VS. NET l Свързването може да става и по време на Сложно свързване с VS. NET l Свързването може да става и по време на дизайн с VS. NET (ако ползваме за източник Data. Set)

Контролата Data. Grid l Data. Grid контролата визуализира таблични данни Осигурява навигация по редове Контролата Data. Grid l Data. Grid контролата визуализира таблични данни Осигурява навигация по редове и колони l Позволява редактиране на данните l Слаба функционалност l l Ще бъде заменена в бъдещи версии на. NET Framework Използва се най-често с ADO. NET Data. Set и Data. Table l Data. Source – задава източника на данни l Data. Member – задава пътя до данните в рамките на източника l

Data. Grid – пример private void Main. Form_Load( object sender, System. Event. Args e) Data. Grid – пример private void Main. Form_Load( object sender, System. Event. Args e) { // Create table "Towns" Data. Table towns = new Data. Table("Towns"); towns. Columns. Add( new Data. Column("id", typeof(int))); towns. Columns. Add( new Data. Column("name", typeof(string))); // Add some rows in the table Data. Row row = towns. New. Row(); row["id"] = 1; row["name"] = "София"; towns. Rows. Add(row); row = towns. New. Row(); row["id"] = 2; row["name"] = "Пловдив"; towns. Rows. Add(row);

Data. Grid – пример row = towns. New. Row(); row[

Демонстрация #12 l Работа с Data. Grid контролата Демонстрация #12 l Работа с Data. Grid контролата

Контролата Data. Grid l По-важни свойства на Data. Grid l l l Read. Only Контролата Data. Grid l По-важни свойства на Data. Grid l l l Read. Only – разрешава / забранява редакция Caption. Visible – показва / скрива заглавието Column. Headers. Visible – показва / скрива заглавията на колоните Row. Headers. Visible – показва / скрива колоната вляво от редовете Table. Styles – задава стилове за таблицата l Активен е само първият стил l Mapping. Name – задава таблицата, за която се отнася дефинираният стил l Grid. Column. Styles – задава форматирането на отделните колони – заглавие, ширина и др.

Master-Details навигация l l l Master-Details навигацията отразява взаимоотношения тип Master-Details навигация l l l Master-Details навигацията отразява взаимоотношения тип "1 към много" l Например: 1 регион има много области В ADO. NET Data. Set обектите се поддържат релации тип "главен/подчинен" l Използват се Data. Relation обектите в Data. Set Windows Forms поддържа Master-Details навигация l На главната контрола се задава за източник на данните главната таблица l На подчинената контрола се задава за източник на данните релацията на таблицата l Контролите се свързват с един и същ Data. Set

Master-Details – пример // Bind the master grid to the master table Data. Grid. Master-Details – пример // Bind the master grid to the master table Data. Grid. Countries. Data. Source = dataset. Countries. And. Towns; Data. Grid. Countries. Data. Member = "Countries"; // Bind the detail grid to the relationship Data. Grid. Towns. Data. Source = dataset. Countries. And. Towns; Data. Grid. Towns. Data. Member = "Countries. Towns";

Демонстрация #14 l Master-Details навигация Демонстрация #14 l Master-Details навигация

Релации Релации "много към много" l l Релации тип "много към много" не се поддържат от Data. Set и Data. Grid Могат да бъдат сведени до Master-Details чрез добавяне на изглед в базата от данни CREATE VIEW View_Students. Courses AS SELECT Student. Id, Student. Name, Course. Id, Course. Name FROM Students, Courses, Students. Courses WHERE Students. Id = Students. Courses. Student. Id AND Courses. Course. Id = Students. Course. Id

Релации Релации "много към много"

Наследяване на форми l Наследяването на форми l Позволява повторно използване на части от Наследяване на форми l Наследяването на форми l Позволява повторно използване на части от потребителския интерфейс l Възможно е да се променят наведнъж общите части на много форми l Чрез подмяна на единичен DLL файл може да се променят всички форми l Формите-наследници могат да добавят функционалност l Виртуални методи могат да реализират специфичната за наследниците функционалност, достъпна от базовата

Наследяване на форми l Базовата форма е най-обикновена форма Контролите, които могат да се Наследяване на форми l Базовата форма е най-обикновена форма Контролите, които могат да се променят, се обявят като protected l Останалите контроли не могат да се променят от формите-наследници l l За наследяване на форма се наследява класът на базовата форма l l Формите-наследници се създават се от Visual Studio. NET (чрез File | Add New Item … | Inherited Form) При промяна на базовата форма

Демонстрация #15 l Наследяване на форми Демонстрация #15 l Наследяване на форми

Печатане на принтер l Използват се 3 ключови класа: l Print. Dialog l Стандартен Печатане на принтер l Използват се 3 ключови класа: l Print. Dialog l Стандартен диалог за печатане на принтер l Print. Controller l Управлява процеса на печатане и активира събития, свързани с него l Предоставя Graphics повърхността l Print. Document l Описва характеристиките на отпечатвания документ l Съдържа Printer. Settings върнати от

Document/View – MFC Document/View – MFC

Програмна архитектура Document/View обект –прил. (цикъл на съобщ. ) съобщенията се изпомпват към рамка Програмна архитектура Document/View обект –прил. (цикъл на съобщ. ) съобщенията се изпомпват към рамка и изглед обект на прозореца – рамка Изглед Документен обект

Document class: Get. First. View. Position(); Get. Next. View(); On. New. Document(); On. Open. Document class: Get. First. View. Position(); Get. Next. View(); On. New. Document(); On. Open. Document(); Serialize() View class CView. Count. Doc* p. Doc = dynamic_cast(Get. Document()); Добре е в прил. да има собствена реал. на Get. Document(): View. Count. Doc* CView. Count. View: : Get. Documet() { CView. Count. Doc* p. Doc = dynamic_cast(Get. Document()); ASSERT_VALID( p. Doc); Return p. Doc; } void CMy. View: : On. Draw(CDC* p. DC) { CMy. Doc* p. Doc = Get. Document(); CString string = p. Doc Get. String(); CRect rect; Get. Client. Rect(&rect); p. DC Draw. Text( string, rect, ……………. . ); } …. On. Draw(); On. Initial. Update(); On. Update(). .

Main Frame & Child Frame Windows On. Close(); преоразмеряване; работа с toolbar. . Произхождат Main Frame & Child Frame Windows On. Close(); преоразмеряване; работа с toolbar. . Произхождат от CFrame. Wnd и CMDIFrame. Wnd SDI File… MDI x x File… x CChild. Frame CView CMain. Frame можем да модифицираме поведението на MDI child frame (CChild. Frame): BOOL CChild. Frame: : Pre. Create. Window( CREATESTRUCT& cs) {…}

Application class: наследява CWin. App. Инициализации; стартиране; качване на doc. Template… Document Template Прави Application class: наследява CWin. App. Инициализации; стартиране; качване на doc. Template… Document Template Прави връзка м/ду ( при това само по 1) document class , view, frame. Има CSingle. Doc. Template и CMultiple. Doc. Template. Съдържа: • документен низ (7 полета), n. My_appnnn. My_app. Documentn. My_app Document • Иконата на изображението • Менюто при активно изображение. SDI документния шаблон се създава още в Init. Instanse(): CSingle. Doc. Template * p. Doc. Template; p. Doc. Template = new CSingle. Doc. Template( IDR_MAINFRAME, RUNTIME_CLASS( CMy. Doc), RUNTIME_CLASS( CMain. Frame), RUNTIME_CLASS( CMy. View)); Add. Doc. Template(p. Doc. Template); // следват редове зарег. на док. типове в REG, създаване обектите от шаблона, показване рамката и изгледа. Включва се цикълът за обр. съобщения, като командните съобщения (от меню, акселер. , toolbar) се насочват за обработка към обектите - изглед документ шаблон рамка приложение : : Def. Window. Proc() (command routing).

Ако MDI има повече документи и изображения (CDoc. Manager): Documet Template CWin. App Documet Ако MDI има повече документи и изображения (CDoc. Manager): Documet Template CWin. App Documet Template list Време на живот на документа и изображението MDI SDI Create additional Documents Construction On. New. Document On. Close. Document Destruction

CWin. App: : On. File. New() – създава док от template; On. New. Document() CWin. App: : On. File. New() – създава док от template; On. New. Document() Delete. Contents() CWin. Ap: : On. File. Open()- диалог; CDocument: : On. Open. Document() Delete. Contents(), сери. Updating Document & Views класовете документи и изображения си взаимодействат: Update. All. Views CDocument CView On. Initial. Update On. Update Get. Document Основни View класове към MFC CView – Стандартен дъщерен прозорец за вашето изображение. CScroll. View – Добавя scroll възможности към CView. CForm. View – Предостявя диалог за вграждане на контроли в изображението CRecord. View – Производен на горния, използва се при работа с ODBC БД – изобразява запис от ODBC база данни. CDao. Record. View – Подобен на горния, но за работа с DAO. CEdit. View – Съдържа edit control, който попълва клиентската област. CTree. View – Съдържа tree view control, койо попълва клиентската област на изображението. CRich. Edit. View – Съдържа rich edit control, който попълва клиентската област на изображението. CList. View – Съдържа list control. CHtml. View – Създава изгледи от html формати и други формати, поддържани от контрола Web. Brouser на Microsoft Internet Explorer.

Наследствени връзки между тези класове CView CScroll. View CEdit. View CForm. View CRecord. View Наследствени връзки между тези класове CView CScroll. View CEdit. View CForm. View CRecord. View CList. View CCtrl. View CRich. Edit. View CHtml. View CDao. Record. View CTree. View

CScroll. View void CMy. View: : On. Initial. Update() { CScroll. View: : On. CScroll. View void CMy. View: : On. Initial. Update() { CScroll. View: : On. Initial. Update(); Set. Scroll. Sizes(MM_TEXT, CSize(1280, 1024)); //+стъпка скролиране } Основни ф-ии на класа: CPoint pos = Get. Scroll. Position(); Scroll. To. Position(CPoint(100, 100)); CSize size = Get. Total. Size(); //връща лог. размер на изгледа int n. Width = size. cx; int n. Height = size. cy; Set. Scale. To. Fit. Size(Get. Total. Size()); //мащабира лог. изглед Set. Scroll. Size(…. ) //за динамична корекция на лог изглед On. Draw(&dc) Преди On. Draw(), във ф-ия On. Paint(): CPaint. DC dc(this); On. Prepare. DC(&dc); On. Draw(&dc); Ако искате On. Draw() да прерисува само инвалидизирания правоъгълник: . CRect rect; p. DC Get. Clip. Box(&rect); //попълва размера на инвалид. правоъгълник.

HTML изгледи CHtml. View: обвивка на IWeb. Brouser 2 Невиртуални операции (готови методи) на HTML изгледи CHtml. View: обвивка на IWeb. Brouser 2 Невиртуални операции (готови методи) на класа: Get. Busy показва дали в момета е download Get. Locatin. URL извлича URL адресана текущата страница Go. Back Go. Forward Refresh Stop преустановява зареждането Navigate по зададен URL адрес изобразява текуща страница ето пример: ON_COMMAND(ID_BACK, On. Back) в message map на CMy. View ON_COMMAND) ID_REFRESH, On. Refresh) … void CMy. View: : On. Back() { Go. Back() } … Преход към друга страница можете да направите: Navigate( _T(http: //www. microsoft. com)); “тънки клиенти”: void CHtml. Clock. View: : On. Initial. Update() { …. Navigate(string); …

Дървовидни и списъчни изгледи CTree. View CTree. Ctrl& CTree. View: : Get. Tree. Ctrl(); Дървовидни и списъчни изгледи CTree. View CTree. Ctrl& CTree. View: : Get. Tree. Ctrl(); Интересни методи на класа: : : Set. Image. List() //свързва текста с картинка : : Insert. Item() // вмъкване, корен, подредба, картинка и т. н. : : Delete. Item() : : Set. Item. Text() : : Sort. Children() : : Get. Selected. Item() CList. View: получава функционалност от съответния контрол Създаване на изгледи, базирани на контроли (наследници на CCtrl. View: * да се декларира клас, наследник на напр. CCtrl. View, като в конструктора на базовия се подава името на създавания. * да се опише ф-ия ( Get. Tab. Ctrl() или подобна) връщаща this към обхващания контрол: CTab. Ctrl& Get. Tab. Ctrl() const {return (CTab. Ctrl*) this; } * да се предефинират поне 2 метода: CMy. View: : Pre. Create. Window(. . ) //на CWnd; указва стил; инициализира библ. за общи контроли (: : Init. Common. Controls()) : : On. Initial. Update() // начално изобразяване • После Get. Tab. Ctrl(). метод_на_tab_контрола()

Създаване на много документи и много изгледи в прилoжението MDI - разлики с SDI: Създаване на много документи и много изгледи в прилoжението MDI - разлики с SDI: 1. Много отворени документи 2. Различни типове документи в MDI 3. MDI поддържа меню-опция Windows… 4. Много менюта в MDI 5. Много прозорци-рамки в MDI: • наследява главната рамка не от CFrame. Wnd, а от CMDIFrame. Wnd. * наследява дъщерните рамки от CMDIChild. Wnd • за шаблони на документа се използва не CSingle. Doc. Template а CMulti. Doc. Template с указан параметър в конструктора му (където се указваше прозорецът рамка) не главния, а класът на дъщерния прозорец – рамка. • MDI имат поне два ресурса за меню – когато няма отворен документ и когато има поне 1 отворен. Превключване на менюта; изгледи, отворени документи… се поемат от генериран код

 Различни типове документи в MDI приложение За да създадем прил. Обработващо 2 типа Различни типове документи в MDI приложение За да създадем прил. Обработващо 2 типа документи( при File New): • Създаваме нов клас за документ и нов клас за изглед – например CPiram. Doc и CPiram. View. Класовете да са динамично създаваеми. • За новия тип създайте 4 нови ресурса – икона, меню, таблица с акселератори ( ако трябва) и документен низ. Всички те имат общ ID – например IDR_PIRAMTYPE. • Ако е нужно се създава и собствена дъщерна рамка за новия тип док. • Модифицираме Init. Instance() за добавяне новия документен шаблон: CMulti. Doc. Template* p. Doc. Template; p. Doc. Template = new CMulti. Doc. Template( описаните по-долу 4 парам. ); • ресурсен ID • Указател към CRuntime class (RUNTIME_CLASS() ) за документа. • Указател към CRuntime class за рамката. • Указател към CRuntime class за изгледа ( CPiram. View). регистрирате новия шаблон: Add. Doc. Template( p. Doc. Template); Ако имате повече документни типове – за всеки в Init. Instance() подобен код. CMulti. Doc. Template има грижа да организира списъка. Това може да се направи и в SDI, ако искате да работите с повете документни типове (но едва ли е нужно)

Разцепени изображения Ето връзката между елментите на split изображението x File Edit View Window Разцепени изображения Ето връзката между елментите на split изображението x File Edit View Window Help File… x CChild. Frame CView CMain. Frame CSplitter. Wnd

Създаване на приложение, поддържащо динамични сплитери ( max 2 части, указани при създаване; имат Създаване на приложение, поддържащо динамични сплитери ( max 2 части, указани при създаване; имат обща лента за скролиранае; по подразбиране се базират на общ view, но ако създадете наследник на CSplitter. Wnd и предефинирате : : Create. View() – то може и на различен) 1. деклариране на нова пром. към CChild. Frame ( или CMain. Frame): // Implementation private: CSplitter. Wnd m_wnd. Splitter; 2. предефиниране на виртуалната On. Create. Client() на рамката : BOOL CChild. Frame: : On. Create. Client( LPCREATESTRUCT lpcs, CCreate. Context* p. Context) { CSize size (10, 10); Return m_wnd. Splitter. Create(this, 2, 1, size, p. Context); } Параметър1: родителя на прозореца със сплитери – прозорец- рамка Параметър2: максималния брой панели на които може да се раздели Параметър4: макс. ширина и височина при които панелите се създават Параметър5: стандартна структура, едно от полетата й е име на класа на изгледа, използван за панелите, *doc; *doc_template. 3. CSplit. View: : On. Draw() CSplitter. Wnd има методи за придвижване на разделителя Може създаване вложени прозорци с дин. Сплитери , в прозорец-статичен Синхронизиране с промените в документа става както беше описано

Създаване на приложение, поддържащо статично split изображение (max 16 X 16, създадени при начално Създаване на приложение, поддържащо статично split изображение (max 16 X 16, създадени при начално изобразяване; променят се само размерите; базират се на разл. Изображения: пр. Windows Explorer) • Ако в App. Wizard укажете създаване не с MFC-базиран стил на прил. , а Windows Explorer базирано, то се структурират 2 статични сплитера • в класа на прозореца рамка (CMain. Frame или CChild. Frame): CSplitter. Wnd m_wnd. Splitter; • предефиниране : BOOL CChild. Frame: : On. Create. Client(LPCREATESTRUCT lpc, Create. Context* p. Context) { if (m_wnd. Splitter. Create. Static(this, 2, 1) == FALSE) {. . } // явно, динамично създаване на изглед за всеки статичен панел от прозореца: BOOL b. Created = m_wnd. Splitter. Create. View(ред_0, кол_0, нач. координати, RUNTIME_CLASS(клас изглед) за панеларазмери на панела); b. Created = m_wndsplitter. Create. View( 1, 0, …); // координатите са долу ляво, указва се и изглед за втория split view Set. Active. View((CView*) m_wndsplitter. Get. Panel(0, 0); //активен панел Return TRUE; }

Splitter Control Splitter Control

'Splitter 1 ' Me. Splitter 1. Location = New System. Drawing. Point(0, 0) Me. 'Splitter 1 ' Me. Splitter 1. Location = New System. Drawing. Point(0, 0) Me. Splitter 1. Name = "Splitter 1" Me. Splitter 1. Size = New System. Drawing. Size(3, 266) Me. Splitter 1. Tab. Index = 0 Me. Splitter 1. Tab. Stop = False ' 'Tree. View 1 ' Me. Tree. View 1. Dock = System. Windows. Forms. Dock. Style. Left Me. Tree. View 1. Location = New System. Drawing. Point(3, 0) Me. Tree. View 1. Name = "Tree. View 1" Me. Tree. View 1. Nodes. Add. Range(New System. Windows. Forms. Tree. Node() {New System. Windows. Forms. Tree. Node("A", New System. Windows. Forms. Tree. Node() {New System. Windows. Forms. Tree. Node("Visual Basic"), New System. Windows. Forms. Tree. Node("Visua l C++"), New System. Windows. Forms. Tree. Node("Delphi"), New System. Windows. Forms. Tree. Node("Jav a")}), New System. Windows. Forms. Tree. Node("B", New System. Windows. Forms. Tree. Node() {New Syste m. Windows. Forms. Tree. Node("1"), New System. Windows. Forms. Tree. Node("2"), New System. Windows. Forms. Tree. Node("3"), New System. Windows. Forms. Tree. Node("4")})}) Me. Tree. View 1. Size = New System. Drawing. Size(101, 266) Me. Tree. View 1. Tab. Index = 1

Toolbox Toolbox