Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » key events

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 <
010
27.05.2005, 10:50 Uhr
~Schu
Gast


Ok...dann füttere ich euch mal mit ein bissl Code...vielleicht wird dann einiges klarer



Code:
// liest den Breitengrad ab dem angegebenen Offset aus und rechnet deisen um in
// Grad (in der Dezimalschreibweise)
// @param offset - gibt an, an welcher Stelle mit dem Auslesen begonnen wird
long double FSPosition::getLat(DWORD offset)
{
    if (!FSUIPC_Read(offset, 8, &readLat, &dwResult) || !FSUIPC_Process(&dwResult))
    {
        foundLat = FALSE;
    }

    if (foundLat)
    {
        degree_in_dec = readLat*90.0/calcLat;
    }
    else { degree_in_dec = 0.0; }
    
    return degree_in_dec;
}



...das ist ein Beispiel wie ich den Breitengrad auslese...FSUIPC_Read(....) ist z.B. eine Methode, die von der Schnittstelle bereitgestellt wird !!

Und hier jetzt Code, wie ich momentan noch (und für mich wenig befriedigend) eine Änderung per Tastatur realisiere:


Code:
//////// function, die den Breitengrad des Towers ändert (um 0, 5 Grad)
void FSTower::setTowerLat()
{
    FSTower tower;
    long double oldLat = tower.getLat(0x0d50);
    printf("Alte Hoehe: %f \n", oldLat);
    char ch;
    std::cin>>ch;
    if (ch == 'k')
    {
        oldLat += 0.00833;
        printf("erhöhter Wert: %f \n", oldLat);
        _int64 insertLat = (oldLat*10001750.0*65536.0*65536.0)/(90.0);
        if (FSUIPC_Write(0x0d50, 8, &insertLat, &dwResult))
        {
            FSUIPC_Process(&dwResult);
        }
    }
}



ich hätte es aber leiber, wenn man irgendwie sagen könnte if (keypressed(key ...., ...)) ohne, dass dabei der Charakter ausgelsen werden muss o.ä. Außerdem muss ich momentan die Eingabe immer noch per <enter> bestätigen und all das ruft immer die shell in den Vordergrund !! außerdem wär's natürlich auch ganz schön, Tastenkombinationen zu haben (z.B. Alt+.... oder Strg+....) !1

Vielleciht ist mein Problem/Anliegen jetzt leichter zu verstehen...

mfg
Schu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
27.05.2005, 11:17 Uhr
Spacelord
Hoffnungsloser Fall


Ersetzt doch mal dein std::cin durch _kbhit und getch(aus dem Beispiel weiter vorne). Dann fällt schon mal das return weg.
Ansonsten finde ich die Vorgehensweise etwas merkwürdig.
Wenn du doch die Methode FSTower::setTowerLat() aufrufst,sollte doch schon fest stehen was zu tun ist.Wieso musst du da noch irgendwelche Tasten drücken?
Sofern es denn eine MFC Anwendung ist solltest du die WM_CHAR Nachricht bearbeiten und wenn irgend ne spezielle Taste gedrückt wird rufst du die passende Methode aus.

Dazu musst du einfach den Klassenassi aufmachen und unterdem Reiter Nachrichtenzuordnungstabelle deine View Klasse aussuchen.Dann machst du noch nen Doppelklick auf WM_CHAR und Zack hast du ne Methode OnChar.
Die sieht dann etwa so aus:

C++:
void CDeineView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    switch (nChar)
    {
        case 'k':
            MessageBox("k gedrückt!");
            //hier deine Funktion Aufrufen
            break;
        case 'a':
            MessageBox("a gedrückt!");
            break;
        default:
            MessageBox("Irgendwas gedrückt!");
    }

    CView::OnChar(nChar, nRepCnt, nFlags);
}




MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
27.05.2005, 12:04 Uhr
~Schu
Gast


ok...das klingt erst einmal einleuchtend

Jetzt noch was...kann ich denn, anstatt die Key's als char auszulesen, diese auch als Hex oder so auslesen ?? Denn wie lese ich z.B. die Cursortasten oder ALT als char aus ?? das wär noch ne feine Sache...

mfg
Schu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
27.05.2005, 13:11 Uhr
Spacelord
Hoffnungsloser Fall


Schau dir halt mal die Dokumentation von WM_CHAR und CWnd::OnChar an.
Für Cursortasten etc. gibt es virtuelle Keycodes die du Abfragen kannst.

Dann les dir das hier mal durch.
www.cpp-tutor.de/mfc/mfc/kap6/lektion2.htm

Schau mal wie weit du damit kommst und wenn du nen konkretes Problem hast meldest du dich wieder.
Das Gebiet ist ne Spur zu komplex als dass man das mal eben in 3 Sätzen beschreiben
könnte.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
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: