Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2016, 05:57   #1
Viktor800
 
Регистрация: 11.08.2016
Сообщений: 3
Вопрос Как организовать программу CLR Console Application в CLR Windows Form

Здравствуйте

Недавно начал изучать С++, использую Visual Studio 2015 на Windows 10, пока что имею очень мало опыта в работе с GUI, поэтому нужна помощь в создании небольшого интерфейса.

Программа проверяет существует ли новая строка, если нет, то записывает ее в текстовой документ, в обеих случаях TTS произносит строку. Я начал ее как CLR Console Application, теперь нужно создать минимальный интерфейс, с одной конпкой, которая должна запускать программу, при повторном нажатии, остонавливать ее (или две кнопки start и stop), а также выводить текущую, зачитываемую строку на панель интерфейса. Никакого ввода текста через сам интерфейс не происходит, в данном случае строки это случайные числы, переведенные в строку. Вопрос в том как организовать эту программу в MyForm.cpp и MyForm.h

Код:
#include "stdafx.h"
#include <conio.h>
#include <Windows.h>
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <msclr\marshal.h>//marshal
#include <random>

using namespace msclr::interop;//marshal namespace
using namespace std;
using namespace System;
using namespace System::Speech::Synthesis;
using namespace System::IO;

const string FILE_NAME = "lines.txt";

vector<string> getFileLines(string file) {
    ifstream in(FILE_NAME);
    vector<string> lines;
    for (string line; getline(in, line); ) {
        lines.push_back(line);
    }
    return lines;
}

string getUserInput() {
    string str;
    getline(cin, str);
    return str;
}

int main()

{

    vector<string> lines = getFileLines(FILE_NAME);

    ofstream fileOut(FILE_NAME, ios::app);

    SpeechSynthesizer^ synth = gcnew SpeechSynthesizer();

    for (;;)

    {

        int a;

        a = rand() % 10 + 1;

        std::string t = std::to_string(a); 

        auto it = std::find(lines.begin(), lines.end(), t);

        if (it == lines.end()) {

            fileOut << t << endl;
            lines.push_back(t);

            cout << "Line \"" << t << "\" saved.\n";

            std::string line = "Line " + t + " saved!";
            synth->Speak(marshal_as<String^>(line.c_str()));

        }

        else

        {   
            cout << "LIne \"" << t << "\" exist.\n";

            std::string line = "Line " + t + " exist!";
            synth->Speak(marshal_as<String^>(line.c_str()));

        }
    } 

    cout << endl;
    getUserInput();
    return 0;
}


Для примера, мой MyForm.ccp



Код:
#include "MyForm.h"

using namespace System;
using namespace System::Windows::Forms;

[STAThread]
void main(array<String^>^ args)
{
	Application::EnableVisualStyles();
	Application::SetCompatibleTextRenderingDefault(false);
	GUI_TEST::MyForm form;
	Application::Run(%form);
}



И MyForm.h где я ничего не вызываю, чтобы не усложнять вопроc, так как я попробовал по-разному, но безуспешно, нет смысла выкладывать все ошибочные попытки, лучше один раз увидеть, как должно быть все организовано:




Код:
       #pragma once


        namespace GUI_TEST {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Summary for MyForm
	/// </summary>
	public ref class MyForm : public System::Windows::Forms::Form
	{
	public:
		MyForm(void)
		{
			InitializeComponent();
			//
			//TODO: Add the constructor code here
			//
		}

	protected:
		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		~MyForm()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::Button^  button1;
	protected:

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>
		System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			this->button1 = (gcnew System::Windows::Forms::Button());
			this->SuspendLayout();
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(101, 181);
			this->button1->Name = L"button1";
			this->button1->Size = System::Drawing::Size(75, 23);
			this->button1->TabIndex = 0;
			this->button1->Text = L"button1";
			this->button1->UseVisualStyleBackColor = true;
			this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);
			// 
			// MyForm
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(284, 261);
			this->Controls->Add(this->button1);
			this->Name = L"MyForm";
			this->Text = L"MyForm";
			this->ResumeLayout(false);

		}
#pragma endregion
	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {


        //КОД


	}
	};
}

Заранее спасибо

Последний раз редактировалось Viktor800; 11.08.2016 в 06:09.
Viktor800 вне форума Ответить с цитированием
Старый 11.08.2016, 08:13   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Viktor800 Посмотреть сообщение
Недавно начал изучать С++
CLR это .NET (C++/CLI), а не обычный С++.

Обычно если используют .NET, то берут нормальный язык для него (C#), а не этого гибридного монстра.

Или чистый С++ с С++ библиотеками (для GUI например Qt или более легковесные wxWidgets, GTK, ...).

Смысл использовать C++/CLI может быть только для специфичных задач о связывании С++ кода и .NET сборок.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.08.2016, 19:40   #3
Viktor800
 
Регистрация: 11.08.2016
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
CLR это .NET (C++/CLI), а не обычный С++.

Обычно если используют .NET, то берут нормальный язык для него (C#), а не этого гибридного монстра.

Или чистый С++ с С++ библиотеками (для GUI например Qt или более легковесные wxWidgets, GTK, ...).

Спасибо за ответ, в С# уже реализовал эту форму, все гораздо проще (для меня по крайней мере). Что касается других библиотек пока не пробовал, но мне интересно, возможноли это сделать с данным кодом и если да, то как?
Viktor800 вне форума Ответить с цитированием
Старый 11.08.2016, 19:52   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А в чем вопрос-то? В коде ж нет ничего кроме формы с кнопкой.

MyForm.cрp странный, обычно в С++ туда помещают реализацию функций класса MyForm (а в .h только объявления).
А main в отдельном файле.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.08.2016, 20:17   #5
Viktor800
 
Регистрация: 11.08.2016
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
В коде ж нет ничего кроме формы с кнопкой.

MyForm.cрp странный, обычно в С++ туда помещают реализацию функций класса MyForm (а в .h только объявления).
А main в отдельном файле.

Cамо сабой, все верно, как я и сказал, я ничего не применил в выложенных MyForm.h и .cpp, чтобы не запутать с вопросом, все мои попытки не срабатывают, то там ошибка, то тут, если все это выкладывать, можно запутаться. Может быть кто с опытом собрал бы эту сборку, и посмотреть, как оно рабтает прямо на этих же формах, по сути это должно быть просто, если вообще возможно
Viktor800 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CLR Console Application KaiseN Visual C++ 0 04.05.2014 19:52
OpenMP и CLR ; /openpm /MTd /clr хочу все и сразу )) kic2512 Visual C++ 0 10.02.2013 22:44
Рисование на picturebox, общие вопросы (c++ clr, windows form app) casekey Помощь студентам 0 22.04.2012 21:37
Как объявить инициализировать глобальный массив Point в clr? scripto Visual C++ 0 07.04.2011 22:12
Console->Form Application Maxs Общие вопросы C/C++ 1 07.04.2009 16:54