Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

15, 15, 60, 70); // Нарисовать эллипс

>

static void Main ( )

{

Appllcation.Run (new MainClass ( )); // Запустить программу

>

>

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

// C++/CLI

#include "stdafx.h"

#using <System.Drawing.dll>

#using <System.Windows.Forms.dll>

using namespace System;

using namespace System::Drawing;

using namespace System: :Windows:: Forms;

ref class MalnClass : Form

{

public: MalnClass ( )

{

Text= "Drawing"; // Заголовок прикладного окна

ShcVi ( ); // Пскэззть окно

Graphics ^gr= this->CreateGraphlcs ( ); // Создать графический

// объект

// Нарисовать строки

gr->DrawString ("Drawing", Font,

gcnew SolidBrush (Color::Blue), 10, 50);

gr->DrawString ("Drawing", gcnew Drawing::Font ("Arlal", 25),

gcnew SolidBrush (Color::FromArgb (100, 255, 0, 0)), 5, 40);

String ^drawStr = "Drawing";

Drawing::Font ^drawFnt = gcnew Drawing::Font ("Arial", 30);

SolidBrush ^drawBr = gcnew SolidBrush (Coior::Green);

float x= 10.0F;

float y= 40.0F;

gr->DrawString (drawStr, drawFnt, drawBr, x, y);

// Нарисовать эллипс

gr->DrawEI/ipse (gcnew Pen (gcnew SolidBrush (Color::DarkViolet),

2), 15, 5, 60, 70);

>

>;

Vold maln ()

{

Appllcatlon::Run (gcnew MainClass ( ));

>

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

// Java и J#

lmportjava.awt.*;

class MainClass extends Frame

{

public MainClass ( )

{

this.setTitle ("Drawing"); // Заголовок прикладного окна

setSize (300, 200);

show ( ); // Показать окно

Graphics gr= this.getGraphics ( ); // Создать графический объект

// Нарисовать строку

gr.setColor (Color.blue);

gr.drawString ("Drawing",10, 80);

// Нарисовать ещё строку

gr.setFont(new Font ("Arial", Font.BOLD,25));

gr.drawString ("Drawing", 5, 70);

// Нарисовать еще строку

String drawStr = "Drawing"; // Создать строку

gr.setFont(new Font ("Arlal", Font.BOLD, 30));

gr.setColor (Color.green);

int x= 10;

int y= 40;

gr.drawStrlng (drawStr, x, у);

gr.setColor (Color.darkGray);

gr.drawOval (15, 45, 60, 100);

// Координаты начала строки

// Нарис-ть строку

// Нарисовать эллипс

public static void main ()

{

MainClass m= new MainClass ( );

>

Рис.10.6.1. Прикладное окно с графической информацией

10.7. Событие Paint и его обработчик

Если прикладное окно программы примера 10.6.1 свернуть, а потом

развернуть или же изменить его размер, то представленная в нём информа-

ция исчезнет. Дело в том, что операционная система Windows не заботится о

восстановлении содержимого окна при его разрушении и возлагает его вос-

становление на само Windows-приложение, то есть на программиста.

При всяком разрушении окна операционная CHCTeMaWindows посылает

приложению событие Paint, и приложение реагирует на него предопределён-

ной функцией-обработчиком OnPaint() в языках C# и C++/CLI или функцией-

обработчиком paint() в языке Java(J#), пустых по умолчанию, то есть ничего

не отображающих в окне. Переопределив функцию OnPaint() или paint(),

приложение будет рисовать в области клиента окна что-то в соответствии с

её реализацией. В описание переопределённой функции на языке C# и

C++/CLI надлежит поместить ключевое слово override. Функции Paint() и

paint() относятся к виртуальным функциям, о которых подробно рассказано в

разделе 13.1.

Перерисовку окна может осуществить и программист, вызвав специ-

альную функцию Invalidate() в языках C# и C++/CLI или функцию repaint() в

языке Java(J#). Вызов этих функций генерирует событие Paint.

Итак, чтобы заставить перерисовываться область клиента окна, необ-

ходимо только переопределить функцию перерисовки, имеющую формат:

C++/CLI.

protected: virtual void OnPaint (PaintEventArgs Ае) override;

C#.

protected override void OnPalnt (PaintEventArgs e);

Функция реагирует на событие, определённое как

C++/CLI. public: event PaintEventHandler ^Paint;

C#.

public event PaintEventHandler Paint;

Событие Paint использует делегат:

C++/CLI.

public: delegate void PaintEventHandler (Object ^sender, PaintEventArgs Ле);

C#.

public delegate void PaintEventHandler (object sender, PaintEventArgs e);

Для языка Java(J#) функция перерисовки имеет формат:

Java(J#).

public void paint (Graphics g);

Пример 10.7.1 иллюстрирует использование событий, возникающих

при нажатии на клавишу мыши и при перерисовке области клиента при-

кладного окна.

Пример 10.7.1. Программа рисования ломаной линии.

Приложение создаёт главное окно и ожидает нажатия левой клавиши мыши.

При нажатии на клавишу рисуется линия из текущей точки в точку носика

указателя мыши. После этого текущая точка переносится в точку носика

указателя мыши, и приложение снова ждёт нажатия левой клавиши мыши.

Прикладное окно с нарисованной ломаной линией изображено на рис. 10.7.1.

Рис.10.7.1. Прикладное окно программы рисования ломаной линии

Ниже приводится программа;

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

//C#

using System;

using System.Drawing;

using System.Windows.Forms;

class CLine : Form // Класс прикладного окна

{

Point [ ] points; // Массив точек носика курсора мыши