Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Button in Mvc++

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 < [ 2 ]
000
29.07.2003, 08:29 Uhr
~freecounter
Gast


Also, ich bin ein Anfänger in Visual C++.

Ich hab ein Button gemacht, der mir ermöglicht ein LED einzuschalten, aber wenn ich ihn drücke da passiert nichts, wenn ich ihn aber loslasse, dann blinckt das LED kurz zeitig und geht dann aus.
Ich will also, dass die eingeschaltete funktion bleibt.
Wie kann ich das machen????
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.07.2003, 08:56 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


entweder du hast die LED falsch an den Com-Port gekoppelt, oder du schaltest sie im button aufruf gleichzeitig ein und wieder aus.
Buttons werden (meistens) auf release (wenn man loslässt) getriggert.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.07.2003, 09:10 Uhr
ao

(Operator)


@freecounter:
Du hattest doch gestern nebenan bei WinAPI ne ähnliche Frage. An welchem Pin ist die LED jetzt angeschlossen und wie steuerst du sie an?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.07.2003, 09:42 Uhr
Tommix



Hallo,
wenn Du einen Button willst, der einrastet, musst Du ein Kontrollkästchen (Checkbox) nehmen und unter Formate "Drucktaste" wählen. Dann brauchst Du noch eine passende Membervariable vom Typ BOOL und kannst dann in der Nachrichtenbehandlungsroutine entsprechend reagieren:

C++:
void CTestDlg::OnCheck1()
{
    UpdateData();

    if (m_bCheck1)
    {
        // LED an
    }
    else
    {
        // LED aus
    }
}



Ich hoffe mal die Frage lief darauf hinaus, der Hardwareteil war ja schon geklärt..

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
29.07.2003, 11:24 Uhr
~freecounter
Gast


Ja(Tommix), du hast mich völlig verstanden.
Aber unter Membervariable verstehe ich noch nicht ganz.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
29.07.2003, 11:51 Uhr
Tommix



Wenn Du mit rechts im Dialogeditor auf den Button klickst, wählst Du "Klassen-Assistent", dann die Registerkarte "Member-Variablen". Dort fügst Du für den Button, der wenn Du ihn nicht umbenannt hast IDC_CHECK1 heisst eine Variable vom Typ BOOL hinzu. Diese bekommt dann bei UpdateData(TRUE) den Zustand Controls (gedrückt oder nicht).
Dann gehst Du, immer noch im Klassen-Assi, auf "Nachrichtenzuordnungstabellen", wählst wieder IDC_CHECK1 und BN_CLICKED. Dann "Funktion hinzufügen" und "Code bearbeiten". Damit erstellt der Klassen-Assi einen Funktionsrumpf, den Du wie oben geposted füllst.
Das ganze Konzept ist übrigens in "Visual C++ in 21 Tagen" - kostenlos als EBook (siehe Forenheader) herunterladbar - wie ich finde sehr gut beschrieben.

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


Jetzt bich ich Total fertig, den checkBox hab ich gemacht, das funktioniert sogar.
Aber die verdammte LED geht wie beidem Button an, ich meine beim loslassen und vielleicht eine habe sekunde.
Dannnach habe ich versucht mit Sleep(5000); und wie ein wunder leuchtete die LED,
aber das Programm hängt bei der Sache, genau die zeit die er zusenden hat.
Ich bin sicher(Tommix), dass ich genau so gemacht, wie du mir gesagt hast.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
29.07.2003, 16:09 Uhr
Tommix



Aber der Button bleibt, wie ein ehemaliger Mitschüler mal in einem Beleg schrieb "in der gedrückten Stellung" (Kommentar des Lehrers: Die kannte ich noch nicht )?
Poste mal, was Du jetzt hast. Wo ist das Sleep?

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.07.2003, 18:43 Uhr
~freecounter
Gast


Also, das ist der Code:

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

if (m_bCheck1)
{
HANDLE hPort = CreateFile(TEXT("COM2"),GENERIC_READ | GENERIC_WRITE,
0,NULL,OPEN_EXISTING,0,NULL);
EscapeCommFunction (hPort, SETRTS);
Sleep(5000);
CloseHandle (hPort);
}
else
{
HANDLE hPort = CreateFile(TEXT("COM2"),GENERIC_READ | GENERIC_WRITE,
0,NULL,OPEN_EXISTING,0,NULL);
EscapeCommFunction (hPort, CLRRTS);
CloseHandle (hPort);
}
}

Und der Checkbox, der bleibt gedrückt, aber die Leuchte nicht!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.07.2003, 19:43 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Vielleicht liegt es daran das sobald du eine "Verbindung" aufbaust, deine LED mit Strom versorgt wird, sobald diese getrennt wird (CloseHandle) diese Stromzufuhr deaktiviert wird...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: