Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Pfeiltasten machen nicht das, was sie sollen

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
16.03.2006, 10:03 Uhr
kleineSchildy



Hallo,

ich möchte mittels der Pfeiltasten, gerne bestimmte Funktionen ausführen:

Hier mal mein Code dazu:

C++:
void CCDSEM_Bild_ViewerDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // TODO: Add your message handler code here and/or call default
    switch (nChar)
    {
        case VK_DOWN: OnDown();
        case VK_UP: OnDown();
        break;
    }

    
    CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}



Leider scheint es so nicht zu funktionieren. Mittels der Pfeiltasten hüpfen ich bloß zwischen den verschiedenen Buttons hin und her

Kann mir jemand helfen?

Viele Grüße
Jana
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.03.2006, 10:14 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Dann musst du die bei PreTranslateMessage abfangen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.03.2006, 10:34 Uhr
~kleineSchildy
Gast


Hi Guybrush,

Ich habe es jetzt mit PreTranslateMessage gelöst. Klappt soweit auch ganz gut, allerdings führt er es immer viel zu oft und schnell aus. Quasi, obwohl ich die Taste nur einmal drücke, wird meine Funktion mehrmals ausgeführt. Wie kann man das verhindern?

Gibt es da noch einen Trick?


C++:
BOOL CCDSEM_Bild_ViewerDlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class
    if (pMsg->wParam == VK_DOWN) OnDown();
    else if (pMsg->wParam == VK_UP) OnUp();
    
    return CDialog::PreTranslateMessage(pMsg);
}



Viele Grüße
Jana
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.03.2006, 10:49 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ja das Problem hatte ich auch schonmal in einem ActiveX Steuerelement das ich mit der MFC geschrieben habe. Da ich nicht rausbekommen habe woran das genau liegt und das immer 2 mal ausgeführt wurde hab ich einfach ne Variable eingbaut die in das if mit einfließt und dafür sorgt das der 2te Aufruf übersprugen wird.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.03.2006, 16:26 Uhr
xXx
Devil


ich vermute mal, das de halt solange, wie die Taste runter ist, der immer wieder die Message schickt... dadurch dann halt die folge das der mehrmals runter geht
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.03.2006, 08:51 Uhr
~kleineSchildy
Gast


Hallo Guybrush,

kannst du mir kurz deine Lösung vorstellen? Man muß ja irgendwie verhindern, dass die Methode PreTranslateMessage mehrmals hintereinander aufgerufen wird.
Irgendwie komme ich da zu keiner richtigen Lösung.

Viele Grüße
Jana
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.03.2006, 10:27 Uhr
kleineSchildy



Hallo,

habe es gelöst. Hier meine Lösung

PreTranslateMessage - Methode

C++:
BOOL CCDSEM_Bild_ViewerDlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class
    if (pMsg->message == WM_KEYDOWN)
    {
        if (pMsg->wParam == VK_DOWN)
        {
            if(m_cDown.EnableWindow()){
                m_cDown.EnableWindow(FALSE);
            }
            else OnDown();
            return TRUE;
        }
        if (pMsg->wParam == VK_UP)
        {
            if(m_cUp.EnableWindow()){
                m_cUp.EnableWindow(FALSE);
            }
            else OnUp();
            return TRUE;
        }
    }
    
    return CDialog::PreTranslateMessage(pMsg);
}



OnKeyDown - Methode

C++:
void CCDSEM_Bild_ViewerDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // TODO: Add your message handler code here and/or call default
    switch(nChar)
    {
    case VK_DOWN:
        break;
    case VK_UP:
        break;
    }

    CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}



Viele Grüße
Jana
 
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: