Frage zu PreTranslateMessage



  • Hi,

    um Nachrichten abzufangen wählt man gewöhnlich folgenden Ansatz:

    BOOL CMainDlg::PreTranslateMessage(MSG* pMsg)
    {
        //hier kann man eine Mausbewegung abfangen
        if( pMsg->message == WM_MOUSEMOVE )
        {
            //tue irgendwas...
        }
    
        //hier kann man abfragen, ob ein Key gedrückt wurde
        if( pMsg->message == WM_KEYDOWN )
        {
            //tue irgendwas...
        }
    
        return CDialog::PreTranslateMessage(pMsg);
    }
    

    Soweit so gut. Wenn ich aber einen UnterDialog in meinem HauptDialog wie folgt einbeziehe:

    void CMainDlg::ActivateSubDlg()
    {
        m_SubDlg.Create(IDD_SUB_DIALOG, this); //wobei m_SubDlg eine Variable des UnterDialogs ist.
        m_SubDlg.ShowWindow(SW_SHOW);
    
        //tue irgendwas...
    
    }
    

    ...dann kann ich in meinem UnterDialog mit PreTranslateMessage die Nachricht für's Key-Drücken nicht mehr abfangen 😞

    BOOL SubDlg::PreTranslateMessage(MSG* pMsg)
    {
        if( pMsg->message == WM_KEYDOWN )
        {
            //hier komme ich nie hin, egal welche Taste ich drücke
        }
    
        return CDialog::PreTranslateMessage(pMsg);
    }
    

    Hat jemand eine Idee?

    Danbke im Voraus



  • BOOL CProjekt::PreTranslateMessage(MSG* pMsg) 
    {
      CString KeyPressed;
      CString Key ="1234567890+-*//"; // erlaubte zeichen
      int keyAscii;
      CWnd* Editfeld  = GetDlgItem(IDC_EDITn);// Editfelder in der Klasse
      if ( (pMsg->message == WM_CHAR && this->GetFocus() == Editfeld)  ||
           (pMsg->wParam==VK_RETURN) )// Im Editfeld oder die Entertaste
      {
        keyAscii = pMsg->wParam;
        KeyPressed.Format(_T("%c"),keyAscii); 
        if (Key.Find(KeyPressed,0) == -1 &&  keyAscii !=8)
          return 1;
      }
      else
      {
        return CDialog::PreTranslateMessage(pMsg);
      }
      return false;
    }
    

    so geht es bei mir wenn ich bestimmte Zeichen "erlauben" will!
    hoffe es hilft
    sven


Anmelden zum Antworten