MFC Edit % anfangen und ersetzen



  • Hallo
    ich möchte gern im Edit ( DDX_Text(pDX, IDC_EDT_SEARCH, m_strSearch); ) die tastenkompi shift+5 abfangen und dem Programm erklären das % = * ist. Somit soll es später wurst sein ob ich in der suche eingebe:

    %test%
    *test*

    Zur zeit geht das Suchen im Programm nur mit % was total nervt.

    Ist sowas in der PreTranslateMessage Funktion möglich ?
    wenn ja wie.

    BOOL CDatenbank::PreTranslateMessage(MSG* pMsg)
    {
    
    // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
        // Falls Taste gedrueckt wurde
        if (pMsg->message == WM_KEYDOWN)
        {
            // Wenn ESCAPE, dann Nachricht verwerfen
            if (pMsg->wParam == VK_ESCAPE)
            // Nachricht verwerfen!
                return 1;
            // Wenn RETURN, dann nach TAB umwandeln
          //  if (pMsg->wParam == VK_RETURN)
                pMsg->wParam = VK_TAB;
    
        }
    
        // Standard-Behandlung durchfuehren
            if(pMsg->wParam == VK_RETURN){
            if(GetDlgItem(IDC_EDT_SEARCH) == GetFocus()){
                UpdateData(TRUE);
                if(m_strSearch.GetLength() > 0){
                    if(atof(m_strSearch) > 0)    // ist es eine Zahl?
                        SearchNameNumber(FALSE);
                    else
                        SearchNameNumber();
                }
            }
            return TRUE;
        }
    
        return CDialog::PreTranslateMessage(pMsg);
    
    }
    

    Edit:
    es wäre sicher besser auf den Such Button ein Funktion zu legen das ASCII von * einfach beim drücken der Suche zu ASCII % zu ersetzen oder?

    So das man eingeben kann *Test aber beim Drücken der Suchfunktion gesucht wird %Test

    Was meint Ihr?
    Ideen ?


  • Mod

    Das geht nicht mit PreTranslateMessage.
    1. Edit Control subclassen
    2. OnChar überschreiben. Handler schreiben der prüft was Du wie behandeln willst
    3. Nachricht anpassen und statt Default oder die Baseklasse aufrufen DefWindowProc verwenden.

    Ansonsten ist Dein Ansatz die VK_RETURN Taste umzubiegen auch nicht korrekt.
    Verwende direkt NextDlgCtl.
    Ansonsten lies mal:
    http://blog.m-ri.de/index.php/2008/09/21/die-return-taste-in-dialogen-eine-unendliche-geschichte/


Anmelden zum Antworten