Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Checkbox

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.07.2003, 12:19 Uhr
~freecounter
Gast


Ich hab schon wieder ein Problem.
Die Leuchte kann ich schon einschalten, aber ich kann sie jetzt nicht ausschalten(Wenn ich nur das Programm beende)
und mir dem CheckBox geht nicht.

C++:
void CComPortDlg::OnCheck1()
{
    // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
     UpdateData(TRUE);

    if (m_bCheck1 == TRUE)
    {

        HANDLE hPort = CreateFile(TEXT("COM2"),GENERIC_READ | GENERIC_WRITE,
        0,NULL,OPEN_EXISTING,0,NULL);
        EscapeCommFunction (hPort, SETRTS);
    }
    else
    {

        HANDLE hPort = CreateFile(TEXT("COM2"),GENERIC_READ | GENERIC_WRITE,
        0,NULL,OPEN_EXISTING,0,NULL);
        EscapeCommFunction (hPort, CLRRTS);
        CloseHandle (hPort);

    }
}



--edit: cpp-tags. Denk nächstes mal selbst dran.

Dieser Post wurde am 30.07.2003 um 15:51 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.07.2003, 12:49 Uhr
Tommix



Hallo,
logisch, jetzt versuchst Du den Port zu öffnen, obwohl er schon offen ist. Probier mal (ungetestet) folgendes:

C++:
//In den Header unter private oder protected:
HANDLE m_hPort;

// Im cpp-File in OnInitDialog():
m_hPort = CreateFile(TEXT("COM2"),GENERIC_READ | GENERIC_WRITE,
        0,NULL,OPEN_EXISTING,0,NULL);
ASSERT(m_hPort != NULL);

// in den Destruktor:
CloseHandle(m_hPort);

// und in die Behandlungsroutine nur noch:
if (m_bCheck1 == TRUE)
{
        EscapeCommFunction (m_hPort, SETRTS);
}
    else
{
        EscapeCommFunction (m_hPort, CLRRTS);
}



Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.07.2003, 15:49 Uhr
~freecounter
Gast


es leuchtet kurz auf und weiter nichts
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.07.2003, 16:18 Uhr
Tommix



Ich sehe im Moment nix. Das UpdateData() hast Du hoffentlich drin gelassen?
Ansonsten setz doch mal nen Breakpoint und gehe das ganze im Einzelschrittmodus durch, da siehst Du bei welcher Funtion was genau passiert...

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.07.2003, 08:47 Uhr
~freecounter
Gast


Ich hab nichtz ganz verstanden, wo ist eigentlich <b>DESTRUKTOR</b>???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.07.2003, 10:06 Uhr
Tommix



Hallo,
bei einer dialogbasierten Anwendung musst du den Destruktor für den Dialog selbst einbauen, standardmässig wird nur der Destruktor der Basisklasse (CDialog) aufgerufen:

C++:
CComPortDlg::~CComPortDlg()
{
    ASSERT(m_hPort != NULL);
    CloseHandle(m_hPort);
}


Und der Rest, um das noch mal deutlich zu machen:

C++:
BOOL CComPortDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    SetIcon(m_hIcon, TRUE);    // Großes Symbol verwenden
    SetIcon(m_hIcon, FALSE);  // Kleines Symbol verwenden

    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen

    m_hPort = CreateFile(TEXT("COM2"),GENERIC_READ | GENERIC_WRITE,
        0,NULL,OPEN_EXISTING,0,NULL);

    return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}

void CComPortDlg::OnCheck1()
{
    // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
     UpdateData(TRUE);

    if (m_bCheck1 == TRUE)
    {
        EscapeCommFunction (m_hPort, SETRTS);
    }
    else
    {
       EscapeCommFunction (m_hPort, CLRRTS);
    }
}



Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.07.2003, 13:15 Uhr
~freecounter
Gast


Gibt's eigentlich eine Site, wo über Destruktor 'ne erklärung ist oder vielleicht kannst du mir das erklären, weil ich weiss nicht wohin ich das einfügen muss und davon höre ich das erste mal(ich weiss das nur von DIR)!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.07.2003, 13:36 Uhr
Tommix



Auweia, das ist aber eine elementare Grundlage. Sieh mal unter Literatur und Ebooks in diesem Forum nach, ich persönlich würde C++ in 21 Tagen empfehlen (Ebook).
Genauso wie der Konstruktor (genauer: einer der Konstruktoren) beim Erstellen einer Instanz einer Klasse aufgerufen wird, wird der Destruktor beim zerstören aufgerufen. Der Destruktor heisst genau wie die Klasse mit vorangestelltem ~.

Beispiel (als Konsolenanwendung kopilieren):


C++:
#include <iostream>
using namespace std;

class A
{
public:
    A() {cout << "A-Konstruktor" << endl;}
    ~A() {cout << "A-Destruktor" << endl;}
};

class B
{
public:
    B() {cout << "B-Konstruktor" << endl;}
    ~B() {cout << "B-Destruktor" << endl;}
};



int main()
{
    cout << "Ein A wird erzeugt." << endl;
    A a;

    cout << "Ein B wird dynamisch erzeugt." << endl;
    
    B* pB = new B;

    cout << "Wir loeschen das B." << endl;

    delete pB;

    cout << "Das A wird beim verlassen von main automatisch zerstoert!" << endl;


    return 0;
}



Ansonsten ist für Dich wie gesagt wahrscheinlich ein C++ - Einsteigerbuch zu empfehlen.

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: