Avatar billede tunc84 Nybegynder
28. maj 2010 - 14:40 Der er 12 kommentarer

C++ GUI

Hej folkens.

Jeg ønsker at implementere en GUI til min kode.
Det jeg ønsker er at brugeren af programmet skal kunne trykke på en knap connect og disconnect knap, som tænder/slukker for en diode på et stykke hardware.
Koden fungerer fint, jeg kan sende "1" og "0" i kommando vinduet, som tænder ("1") og slukker ("0") for dioden, men jeg kan simpelthen ikke finde ud af at lave en GUI som kan gøre det ved at trykke på connect knap, således at brugeren ikke behøves at starte kommando vinduet op og skrive hhv 1 og 0.


Jeg har fået strikket følgende kode sammen:

#include "stdafx.h"

using namespace System;
using namespace System::IO::Ports;

int main(array<System::String^>^ argv)
{

    String^ answer;
    String^ portName;
    int baudRate=115200;
    Console::WriteLine("Skriv venligst portnavn");
    portName=Console::ReadLine();
    // arduino settings
    SerialPort^ arduino;
    arduino = gcnew SerialPort(portName, baudRate);
    // open port
    try
    {
        arduino->Open();

        do
        {
            // ask on or off
            Console::WriteLine("Tast \"1\" for at taende ArduinoBT eller tast \"0\" for at slukke: ");
            // get answer
            answer=Console::ReadLine();
            //check that user typed one of the options
            if(String::Compare(answer,"1")==0)
                arduino->WriteLine("1"); // send 1 to arduino
            else if(String::Compare(answer,"0")==0)
                arduino->WriteLine("0"); // send 0 to arduino
            else
                Console::WriteLine(answer+" was not an option");
            // ask user if he wants to continue
            Console::WriteLine("Prov igen? ja/nej");
            // get answer
            answer=Console::ReadLine();
            // clear the screen
            Console::Clear();
        }while(String::Compare(answer,"ja")==0);
        // close port to arduino
        arduino->Close();
    }
    catch (IO::IOException^ e  )
    {
        Console::WriteLine(e->GetType()->Name+": Porten er ikke klar");
    }
    catch (ArgumentException^ e)
    {
        Console::WriteLine(e->GetType()->Name+": Forkert portnavn (skal starte med COM)");
    }
    // end program
    Console::Write("Tryk enter for at lukke programmet");
    Console::Read();
    return 0;
}
Avatar billede arne_v Ekspert
28. maj 2010 - 15:04 #1
Du vil have dette C++/CLI program konverteret fra Console til WinForms?
Avatar billede tunc84 Nybegynder
28. maj 2010 - 15:10 #2
Ja :)
Avatar billede arne_v Ekspert
28. maj 2010 - 15:34 #3
Hvis ikke der er andre som har tid, saa kan jeg proeve senere.
Avatar billede tunc84 Nybegynder
29. maj 2010 - 13:31 #4
Hej arne_v det ville være super.
Kan simpelthen ikke finde ud af  det :(
Avatar billede arne_v Ekspert
30. maj 2010 - 02:54 #5
Det nemmeste er bare at bruge VS wizard til at lave en win form app og så lave knapperne med designeren.
Avatar billede arne_v Ekspert
30. maj 2010 - 02:55 #6
Hvis du absolut vil håndkode så er her et eksempel.

Form1.h


#ifndef FORM1_H
#define FORM1_H

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

namespace WinFormApp
{
    public ref class Form1 : public Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
        }
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
    private:
        Button^ button1;
        Button^ button2;
        System::ComponentModel::Container^ components;
        void InitializeComponent(void)
        {
            this->button1 = gcnew Button();
            this->button2 = gcnew Button();
            this->SuspendLayout();
            this->button1->Location = Point(50, 50);
            this->button1->Size = System::Drawing::Size(75, 25);
            this->button1->Text = L"Button A";
            this->button1->Click += gcnew EventHandler(this, &Form1::button1_Click);
            this->button2->Location = Point(50, 100);
            this->button2->Size = System::Drawing::Size(75, 25);
            this->button2->Text = L"Button B";
            this->button2->Click += gcnew EventHandler(this, &Form1::button2_Click);
            this->ClientSize = System::Drawing::Size(175, 175);
            this->Controls->Add(this->button2);
            this->Controls->Add(this->button1);
            this->Text = L"Demo";
            this->ResumeLayout(false);

        }
        Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
            MessageBox::Show(L"You clicked A");
        }
        Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
            MessageBox::Show(L"You clicked B");
        }
    };
}

#endif // FORM1_H


Form1.cpp


#using <mscorlib.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>

#include "Form1.h"

using namespace WinFormApp;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    Application::Run(gcnew Form1());
    return 0;
}
Avatar billede arne_v Ekspert
30. maj 2010 - 02:56 #7
Jeg er iøvrigt meget skeptisk overfor ideen om at bruge C++ til win forms.
Avatar billede tunc84 Nybegynder
08. juni 2010 - 10:22 #8
Hej igen arne_v

Har fået lavet en gui i c++, men kan ikke få event listener til at fungere, således at jeg kan trykke på en button som sender 1 til boardet.

Har sendt point til dig :)
Avatar billede tunc84 Nybegynder
08. juni 2010 - 10:25 #9
bump
Avatar billede arne_v Ekspert
09. juni 2010 - 04:10 #10
Du har ikke sendt point.

Jeg har ikke engang lagt et svar.

Men her kommer et svar.
Avatar billede arne_v Ekspert
09. juni 2010 - 04:11 #11
Med hensyn til venet listener bliver du nødt til at vise lidt kode !
Avatar billede arne_v Ekspert
13. juni 2010 - 03:52 #12
tunc84?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester