Alle auswählen (Strg-A), um an einer CEdit-Steuerung zu arbeiten

  • Ich versuche, select all (über ctrl-a) in einem CEdit-Steuerelement zu implementieren. Ich mache dies, indem ich eine Klasse mache, die CEdit erbt, und einen Handler für WM_KEYDOWN wie folgt hinzufügen:

     void CEditExtended::OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags )
    {   
      if((nChar == 0x41) && (GetKeyState(VK_CONTROL) & 0x8000) != 0))
        SetSel(0, -1);
    
      CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
    }
     

    Wenn Sie sich im Web umsehen, sollte dies funktionieren, aber es werden niemals gleichzeitig Strg und a gleichzeitig registriert, weder die eine noch die andere.

    22 November 2011
    Logick
3 answers
  • Verwenden Sie diesen Code:

     void CEditExtended::PreTranslateMessage(MSG* pMsg)
    {
     if(pMsg->message == WM_KEYUP )
        {
            if ( (LOWORD(pMsg->wParam) & VK_CONTROL) == VK_CONTROL )
            {
    
             /// blah
    
            }
        }
    
        return CEdit::PreTranslateMessage(pMsg);
    }
     
    19 August 2012
    QuangNHb
  • Eine andere Möglichkeit, STRG + A zu implementieren, ohne die CEdit-Klasse zu erweitern.

    Überschreiben Sie die PreTranslateMessage () - Elementfunktion des Dialogfelds, das über ein Bearbeitungssteuerelement verfügt.

     BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
    {
        if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == 'A')
           && GetKeyState(VK_CONTROL) < 0)
        {
            CWnd *pWnd = GetFocus();
            if (pWnd != NULL)
            {
                CString className;
    
                GetClassName(pWnd->GetSafeHwnd(), className.GetBuffer(80), 80);
                className.ReleaseBuffer();
                if (className.CompareNoCase(_T("edit")) == 0)
                {
                    pWnd->SendMessage(EM_SETSEL, 0, -1);
                    return TRUE;
                }
            }
        }
    
        return CDialogEx::PreTranslateMessage(pMsg);
    }
     
    21 November 2015
    HillArnaud Rinquin
  • Um Strg + A für alle Bearbeitungssteuerelemente in einem Fenster zu implementieren, überschreiben Sie CWnd::PreTranslateMessage, um die Tastenfolge zu überprüfen und zu prüfen, ob der Fokus auf einem Bearbeitungssteuerelement liegt. Wenn ja, wählen Sie seinen Text aus.

     BOOL CMyWindow::PreTranslateMessage(MSG* pMsg)
    {
        if (pMsg->message == WM_KEYDOWN && pMsg->wParam == 'A' && GetKeyState(VK_CONTROL) < 0) {
            if (auto edit = dynamic_cast<CEdit*>(GetFocus())) {
                edit->SetSel(0, -1, FALSE);
                return TRUE;
            }
        }
        return __super::PreTranslateMessage(pMsg);
    }
     
    15 June 2018
    Edward Brey