Шаг 48.
Microsoft Visual C++ 2010. Начала.
Базовые компоненты. Приложение MEdit

    На этом шаге мы рассмотрим полный текст этого приложения.

    Приведем полный текст программы MEdit, демонстрирующий использование компонентов MenuStrip, ToolStrip, ToolTip, OpenFileDialog, SaveFaleDialog, PrintDialog, FontDialog и HelpProvider, приведен ниже. Обратите внимание, в модуль формы надо вставить ссылку на пространство имен System::IO.

.   .   .   .
#include "Form2.h"
.   .   .   .
using namespace System::IO;
.   .   .   .
Form1(void)
	{
		InitializeComponent();
		//
		//TODO: добавьте код конструктора
		//
		textBox1->ScrollBars = ScrollBars::Vertical;
		textBox1->Text = "";

		this->Text = "MEdit - Новый документ";

		// отобразить панель инструментов
		toolStrip1->Visible = true;
		toolStripMenuItem6->Checked = true;
			
		// назначаем файл справки
		helpProvider1->HelpNamespace = Application::StartupPath + 
			"\\spyxx.chm";

		// настройка компонента openDialog1
		openFileDialog1->DefaultExt = "txt";
		openFileDialog1->Filter = "Текст|*.txt";
		openFileDialog1->Title = "Открыть документ";
		openFileDialog1->Multiselect = false;

		// настройка компонента saveDialog1
		saveFileDialog1->DefaultExt = "txt";
		saveFileDialog1->Filter = "Текст|*.txt";
		saveFileDialog1->Title = "Сохранить документ";

		fn = String::Empty;
		textChanged = false;
	}
.   .   .   .
private:
	String^ fn;         // имя файла
	bool textChanged;   // true - в текст внесены изменения

// выбор в меню Файл команды Открыть
private: System::Void toolStripMenuItem2_Click(System::Object^  sender,
		 System::EventArgs^  e) {
		
	System::Windows::Forms::DialogResult dr; 
	int r; 

	r = SaveText(); // сохранить текст, находящийся в поле компонента 

	if (r == 0) // если нечего сохранять...
	{ 
		openFileDialog1->FileName = String::Empty; 
		// отобразить диалог Открыть 
		dr = openFileDialog1->ShowDialog(); 
		if (dr == System::Windows::Forms::DialogResult::OK) 
		{ 
			fn = openFileDialog1->FileName; 
			// отобразить имя файла в заголовке окна 
			this->Text = fn; 
			try 
			{ 
				// считываем данные из файла 
				System::IO::StreamReader^ sr = 
				gcnew System::IO::StreamReader(fn); 
				textBox1->Text = sr->ReadToEnd(); 
				textBox1->SelectionStart = textBox1->TextLength; 
				sr->Close(); 
				textChanged = false; 
			} 
			catch ( System::IO::FileLoadException^ e) 
			{ 
				MessageBox::Show("Ошибка:\n" + e->Message, 
					"MEdit", 
					MessageBoxButtons::OK, 
					MessageBoxIcon::Error); 
			} 
		} 
	} 
}

// изменился текст в поле компонента textBox
private: System::Void textBox1_TextChanged(System::Object^  sender, 
		System::EventArgs^  e) {
 	textChanged = true; // текст изменен
}

// Записывает текст в файл.
// Возвращает 0 или -1, если пользователь
// в окне Сохранить нажмет кнопку Отмена 
private: int TextToFile()
{
	System::Windows::Forms::DialogResult dr;
	int r = 0;
    
	if (fn == String::Empty)
	{
		// это новый документ
		// запросить у пользователя имя файла

		// отобразить диалог Сохранить
		dr = saveFileDialog1->ShowDialog();
		if (dr == ystem::Windows::Forms::DialogResult::OK)
		{
			fn = saveFileDialog1->FileName;
			r = 0;
		}
		else
			// в окне Сохранить пользователь
			// сделал щелчок на кнопке Отмена
			r = -1;			
	}

	// сохранить файл
	if ( r == 0)
	{
		try
		{
			// получим информацию о файле fn
			System::IO::FileInfo^ fi =
				gcnew System::IO::FileInfo(fn);

			// поток для записи
			System::IO::StreamWriter^ sw =
				fi->CreateText();
			sw->Write(textBox1->Text);

			sw->Close(); // закрываем поток
			textChanged = false;
			r = 0;
		}
		catch ( System::IO::IOException^ e)
		{
			MessageBox::Show(e->ToString(),"NkEdit",
			  MessageBoxButtons::OK,
			  MessageBoxIcon::Error);
		}
	}
	return r;
}

// Проверяет, есть ли изменения в тексте и
// сохраняет текст в файле.
// Возвращает:
//   0 или -1, если пользователь
//   отказался от выполнения операции (нажал Cancel)
private: int SaveText()
{
	System::Windows::Forms::DialogResult dr;
		
	int r;
	
	r = 0;
	if (textChanged)
	{		
		dr = MessageBox::Show( 
			"В текст внесены изменения. Сохранить измененный текст?", 
			"MEdit",
			MessageBoxButtons::YesNoCancel,
			MessageBoxIcon::Warning);
		switch (dr)
		{
			case System::Windows::Forms::DialogResult::Yes:
				r = TextToFile();
				break;
		
			case System::Windows::Forms::DialogResult::No:
				r = 0;
				break;
		
			case System::Windows::Forms::DialogResult::Cancel:
				r = -1;
				break;
		};
	}
	return r;
}

// Создать документ
private: void NewDocument()
{
	int r;

	r = SaveText();
    
	if ( r == 0)
	{
		this->Text = "Новый документ";
		textBox1->Clear();
		textChanged = false;
		fn = String::Empty;
	}
}

// Сохранить документ
private: void SaveDocument()
{
	int r;

	r = SaveText();
    
	if ( r == 0)
	{
		this->Text = fn;
		textChanged = false;		
	}
}


// выбор в меню Файл команды Создать
private: System::Void toolStripMenuItem1_Click(System::Object^  sender, 
		System::EventArgs^  e) {
			 NewDocument();
}

// выбор в меню Файл команды Сохранить
private: System::Void toolStripMenuItem3_Click(System::Object^  sender, 
		System::EventArgs^  e) {
			 SaveDocument();
}

// выбор в меню Файл команды Печать
private: System::Void toolStripMenuItem4_Click(System::Object^  sender, 
		System::EventArgs^  e) {
			 printDialog1->ShowDialog();
}

// выбор в меню Файл команды Выход
private: System::Void toolStripMenuItem5_Click(System::Object^  sender,
		 System::EventArgs^  e) {
			 this->Close();
}

// выбор в меню Параметры команды Панель инструментов
private: System::Void toolStripMenuItem6_Click(System::Object^  sender,
		 System::EventArgs^  e) {
			 // отобразить/скрыть панель инструментов
			toolStrip1->Visible = ! toolStrip1->Visible;
			toolStripMenuItem6->Checked =
				! toolStripMenuItem6->Checked;
}

// выбор в меню Параметры команды Шрифт
private: System::Void toolStripMenuItem7_Click(System::Object^  sender, 
		System::EventArgs^  e) {
			 fontDialog1->Font = textBox1->Font;
			if (fontDialog1->ShowDialog() == 
				System::Windows::Forms::DialogResult::OK)
			{
				textBox1->Font = fontDialog1->Font;
			}
}

// попытка закрыть окно программы
private: System::Void Form1_FormClosing(System::Object^  sender, 
		System::Windows::Forms::FormClosingEventArgs^  e) {
			 int r;
	
			r = SaveText();
    
			if ( r != 0)
			{
				e->Cancel = true;
			}
}

// выбор в меню Справка команды О программе
private: System::Void toolStripMenuItem9_Click(System::Object^  sender, 
		System::EventArgs^  e) {
			// чтобы класс Form2 стал доступен,
			// в начало программы надо вставить
			// директиву >#include "Form2.h",
			// где Form2.h - модуль, в котором определен
			// класс Form2
			Form2^ about = gcnew Form2();

			about->ShowDialog();
}

// выбор в меню Справка команды Справочная информация
private: System::Void toolStripMenuItem8_Click(System::Object^  sender, 
		System::EventArgs^  e) {
			 // отображение chm-файла
			 Help::ShowHelp(this, helpProvider1->HelpNamespace);
 }
Архив проекта можно взять здесь.

    На следующих шагах мы дадим краткий обзор использованных в данном приложении компонентов.

    На следующем шаге мы рассмотрим компонент FontDialog.




Предыдущий шаг Содержание Следующий шаг