Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Структура проекту програми Windows Forms Application

Читайте также:
  1. A Singular and plural forms of nouns
  2. A. для виконання програми.
  3. ANSWERS TO JOB-APPLICATION LETTERS
  4. Application call for the 4th enrolment – 2012/2013 academic year
  5. Application form
  6. Application Form
  7. APPLICATION FORM - форма заявки

По замовчанню структура проекту складається з таких файлів:

– myprogram.cpp (назва файлу така ж як назва проекту) це базовий

файл, що містить основну функцію програми.

// директиви препроцесора

#include "stdafx.h"

#include "Form1.h"

// доступ до простору імен myprogram

using namespace myprogram;

// атрибути

[STAThreadAttribute]

// основна функція main

int main(array <System::String ^> ^args)

{

// Встановлення Windows XP візуальних ефектів

Application::EnableVisualStyles();

Application::SetCompatibleTextRenderingDefault(false);

// Створення основного вікна та його запуск

Application::Run(gcnew Form1());

return 0;

}

– Form1.h заголовний файл, програмний код якого описує клас Form1 для представлення вікна програми. Зазначимо, що цей клас визначений у власному просторі імен myprogram.

#pragma once

namespace myprogram {

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

public ref class Form1: public System::Windows::Forms::Form

{ public:

Form1(void)

 

 


{ InitializeComponent(); }

protected:

~Form1()

{

if (components) { delete components; }

Процес візуальної побудови графічного інтерфейсу користувача зводиться до простого перетягування в режимі Form Design необхідних елементів керування на робочу форму та встановлення у вікні Property значень їх властивостей. При цьому автоматично генерується код для доданих елементів керування у вигляді членів класу Form1, а у функції InitialiseComponent() розміщується код ініціалізації кожного із цих об’єктів.  
}

private:

System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code

void InitializeComponent(void)

{ this ->components = gcnew System::ComponentModel::

Container();

this ->Size = System::Drawing::Size(300,300);

this ->Text = L"Form1";

this ->Padding = System::Windows::Forms::Padding(0);

this ->AutoScaleMode = System::Windows::Forms::

AutoScaleMode::Font;}

в components класу Form1 зберігається дескриптор об’єкту Container, у списку якого зберігаються компоненти графічного інтерфейсу користувача. Решта операторів функції визначають властивості форми,

які можна змінювати у вікні Properties (Властивості) форми

 

– AssemblyInfo.cpp файл атрибутів рівня зборки проекту.

– stdafx.h, stdafx.cpp файли, необхідні для попередньої компіляції.

– myprogram.vcproj основний проектний файл VC++, у якому міститься інформація про версію Visual C++, платформу, конфігурацію та властивості проекту.

 

Процес візуальної побудови графічного інтерфейсу користувача зводиться до простого перетягування в режимі Form Design необхідних елементів керування на робочу форму та встановлення у вікні Property значень їх властивостей. При цьому автоматично генерується код для доданих елементів керування у вигляді членів

класу Form1, а у функції InitialiseComponent() розміщується код ініціалізації кожного із цих об’єктів.

// у середині класу Form1, наприклад, оголошення елемента мітки

private: System::Windows::Forms::Label^ label1;

// ініціалізація мітки у функції InitialiseComponent

void InitializeComponent(void)

{ //………… // label1

this ->label1->AutoSize = true;

this ->label1->Location = System::Drawing::Point(68, 92);

this ->label1->Name = L"label1";

this ->label1->Size = System::Drawing::Size(35, 13);

this ->label1->TabIndex = 2;

this ->label1->Text = L"label1";

 

Для реалізації поставленої перед програмою задачі та взаємодії користувача з графічним інтерфейсом необхідно створити функції оброблення подій. Середовище IDE автоматично генерує скелет цих функцій та реєструє їх за допомогою делегатів подій.

 

Подія (event) – це член класу, який дає можливість об’єкту сигналізувати про настання визначеної події, а процес сигналізації для події передбачає використання делегату (delegate).

Делегат – це об’єкт, що інкапсулює один чи більше вказівників на функції із заданим списком параметрів та типом повернення. Таким чином, делегат представляє собою в C++/CLI засіб, подібний вказівнику на функцію в звичайному С++.

 

Оголошення делегата виглядає як прототип функції, якому передує ключове слово delegate, і при цьому задає вказівникове ім’я типу об’єкту делегата та список параметрів і тип повернення функції, яка може бути асоційована з делегатом. Делегат є об’єктом класу System::Delegate, і, відповідно, успадковує члени цього класу.

Оголошення делегата може виглядати так:

 

public delegate void Handler (int value);

 

void Sun1 (int value) { ……. }

void Sun2 (int value) { ……. }

Handler^ handler = gcnew Handler (Sun1); //Об’єкт делегату

Виклик делегата можемо здійснювати одним зі способів

handler –> Invoke (25);

handler (25); // спрощений варіант попереднього оператора

і при цьому здійснюється виклик всіх функцій, що є в списку делегата.

 

Для типів делегатів операція «+» є перевантаженою, що дає можливість об’єднувати списки викликів для двох делегатів у новий делегат. Щоби модифікувати список викликів делегата hendler та додати в нього виклик функції Sun2, необхідно написати такий код

handler += gcnew Handler (Sun2);

Тепер при виклику делегата hendler виконаються послідовно обидві функції Sun1() та Sun2().

Для виключення зі списку викликів делегата певної функції

необхідно використати операцію «–=»

handler –= gcnew Handler (Sun1);

Конструктор делегата з двома аргументами використовується для виклику членів-функцій вказаних об’єктів.

 

Як уже було сказано раніше, сигналізація про події передбачає використання делегата, що містить вказівники на функції, які повинні бути викликані при настанні визначеної події. Більшість подій пов’язані з елементами керування на зразок кнопок чи меню та ініціалізуються в процесі взаємодії користувача з кодом програми.

Подія – це член вказівникового класу, який оголошується з ключовим словом event та іменем класу-делегату.

public delegate void TreeHandler (int value); //Оголошення делегату

// Клас зі членом-подією

public ref class Tree {

public:

event TreeHandler^ woodpecker;

void TriggerEvents () // функція для збудження подій

{ woodpecker (22); woodpecker (33); }

};

 

Коли ми розміщуємо на формі кнопку, то ми знаємо, що при появі події – натисненні на кнопку, щось повинно відбутися: кнопка повинна повідомити об’єкту чи об’єктам, що ми її натиснули. Однак,

ці об’єкти ще можуть бути невизначені. Замість того, аби прив’язувати кнопку до конкретної події, ми пов’язуємо події кнопки з делегатом, а коли програма буде виконуватися, призначимо делегатом той метод, який буде необхідний.

Слід зазначити, що платформа.NET має велику кількість вбудованих подій, доступ до яких здійснюється за їх назвою. Більше того, саме середовище пов’язує, наприклад для події Click (натиснення мишею по формі), обробника та необхідний метод, використовуючи вбудований делегат EventHandler:

 

this ->Click += gcnew System::EventHandler(this, &Form1::Form1_Click);

Платформа.NET потребує точної сигнатури для будь-якого обробника подій. Form1_Click () та всі інші обробники подій повинні обов’язково виглядати так:

 

System::Void Form1_Click(System::Object^ sender, System::EventArgs^ e) {

// код для оброблення події

}

 

 


Дата добавления: 2015-11-16; просмотров: 47 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
How does electricity get into my house?| DISCIPLINES, DISTANCE, STARTS

mybiblioteka.su - 2015-2024 год. (0.014 сек.)