в Windows Form С++/CLI
Чтобы создать новое приложение, выберите File–>New–>Project:
Выберите Windows Form Application, введите имя проекта и выберите Location вашего проекта, как на нижеследующем примере:
В результате получите проект с пустой формой:
Вы его уже можете скомпилировать и запустить. Для этого нужно нажать F5 или кнопку с зеленым треугольником.
Чтобы остановить запущенное приложение нажмите правый верхний крестик (как обычно) или перейдите в Visual studio и нажмите комбинацию клавиш Shift+F5.
Изменим имя приложения, которое выводится вверху. По умолчанию название Form1.
Для этого необходимо нажать кнопку Properties Window , найти поле с названием Text ввести новое название, как показано на примере:
Далее нажмите кнопку Toolbox .
Вы получите список объектов, которые можно расположить на форме. Выберите в списке объект Кнопка(Button) и перетащите его на форму.
Если запустить программу (F5) вы получите пустое приложение с кнопкой, на которую можно нажимать, но ничего происходить не будет.
Для того, чтобы добавить действие на нажатие кнопки, сначала закройте свое приложение, если оно запущено.
|
|
Затем выберите Form1(Design). Если он закрыт, сделайте даблклик в Solution Exploler (обычно он слева) по Form1.h, как показано на рисунке:
Затем сделайте даблклик по кнопке button1.
В результате будет автоматически создана функция для обработки нажатия на кнопку, и вы перейдете в режим редактирования этой функции:
Добавьте в эту функцию нижеследующий код, выделенный красным:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form1::Close();
}
Теперь запустите приложение и нажмите на кнопку. Теперь реакция на нажатие кнопки – это выход из программы.
Теперь добавьте на форму объект RichTextBox:
Этот объект обеспечивает ввод и отображение текста.
Добавьте еще одну кнопку на форму
Сделайте по ней даблклик и добавьте нижеследующий код в автоматически созданную функцию:
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
richTextBox1->Text += L"Привет ";
}
Запустите приложение. Теперь после каждого нажатия на кнопку button2 в richTextBox1 будет добавляться слово Привет:
Буква L перед “Привет ” – это макрос, трансформирующий обычную строку, состоящую из char в строку из расширенных символов wchar_t. Все объекты в Windows Form используют расширенные символы.
Теперь добавим меню в наше приложение.
Для этого выбираем в Toolbox и делаем даблклик по объекту menuStrip:
Выберите добавленный объект, в результате чего вы перейдете в режим редактирования меню:
Отредактируйте меню как показано на примере:
Сделайте даблклик по пункту меню «Выход» и добавьте Form1::Close(); ааналогично как это делали для button1:
|
|
private: System::Void выходToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
Form1::Close();
}
Запустите приложение, проверьте работоспособность меню.
Добавьте из Toolbox объекты OpenFileDialog и SaveFileDialog:
Эти объекты должны появиться под формой:
Теперь перейдите в меню и сделайте даблклик по пункту «Открыть»:
Для работы с файлами будем использовать стандартные средства языка С++.
В сгенерированную функцию «открытьToolStripMenuItem_Click» добавьте следующий код, выделенный красным:
private: System::Void открытьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
if (openFileDialog1->ShowDialog()!= System::Windows::Forms::DialogResult::OK) return;
std::string fileName = SystemStringToStdString(openFileDialog1->FileName);// преобразовании строки типа String^ в стандартную строку std::string
if (fileName.empty()) return;
std::ifstream in (fileName.c_str());
String^ systemEndStr = gcnew String(endStr);//Создаем символ конца строки
while (!in.eof()) // читаем информацию из файл стандартными средствами языка С++
{
std::string s;
getline(in, s);
String^ myInfoDisp = gcnew String(s.c_str());// преобразовании стандартной строки std::string в строку типа String^
richTextBox1->Text += (myInfoDisp+systemEndStr);
}
}
Также нужно добавить в начало этого файла (“ Form1.h ”) подключение библиотек и описание функции SystemStringToStdString:
#pragma once
#include <string>
#include <fstream>
#include <vector>
std::string SystemStringToStdString(System::String^ str)
{
char* pstr = static_cast<char*>(System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str).ToPointer());
// char* stringPointer = (char*) Marshal::StringToHGlobalAnsi(the_string).ToPointer();
std::string resultString(pstr);
System::Runtime::InteropServices::Marshal::FreeHGlobal(System::IntPtr(pstr));
return resultString;
}
const char endStr[] = {13,10,0}; //конец строки для textBox1
………
Запустите приложение. Выполните Файл -> Открыть и выберите текстовый файл. Он должен отобразиться в окне:
Теперь добавим функциональность сохранения текста в файл. Закройте запущенное приложение, перейдите в редактирование меню и сделайте даблклик по пункту «Сохранить»:
В сгенерированную функцию «сохранитьToolStripMenuItem_Click» добавьте следующий код, выделенный красным:
private: System::Void сохранитьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
if (saveFileDialog1->ShowDialog()!= System::Windows::Forms::DialogResult::OK) return;
std::string fileName = SystemStringToStdString(saveFileDialog1->FileName);
if (fileName.empty()) return;
std::ofstream out (fileName.c_str());
std::string saveText = SystemStringToStdString(richTextBox1->Text);
out<<saveText;
}
Запустите приложение. Наберите некоторый текст в окно. Выполните Файл->Сохранить и введите в диалоговом окне имя создаваемого файла.
Напоследок изменим название кнопок:
Выберите на форме button1 и в Properties напротив поля «Text» введите «Закрыть»:
Аналогично изменим надпись на button2:
Создание простого приложения закончено.
Пример проекта, созданного таким образом, смотрите в архиве “ my_example_open_app.zip ”.