Détecter CTRL+V

Résolu
Signaler
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015
-
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015
-
Bonjour

j'aimerais savoir s'il est possible de détecter sur un champ edit
si le texte rentré vient "du clavier" ou s'il vient d'un copier coller (ctrl+V ou menu contextuel clic droit+coller)

J'arrive à détecter l'appui sur Ctrl ou sur V, mais pas la combinaison
et pour le clic droit "coller" : aucune idée


merci

2 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Pour hooker tout ce qui se passe dans un controle, EDIT ou autre, on le sous classe.

Exemple minimaliste qui interdit le copier-coller.

HWND hNBR = 0;
WNDPROC oldFloatProc = 0;

LRESULT CALLBACK ProcEdFloat(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  //if(mssg == WM_CHAR) TonCodePourWM_CHAR();
  if(mssg == WM_PASTE) return 0;
  return CallWindowProc(oldFloatProc, hwnd, mssg, wParam, lParam);
}

INT_PTR AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case WM_INITDIALOG:
      SetClassLongPtr(hdlg, GCLP_HICON, (LONG_PTR) LoadIcon(0, IDI_APPLICATION));
      hNBR = GetDlgItem(hdlg, IDED_NBR);
      SendMessage(hNBR, EM_LIMITTEXT, 23, 0);
      oldFloatProc = (WNDPROC) SetWindowLongPtrA(hNBR, GWLP_WNDPROC, (LONG_PTR) ProcEdFloat);
      return 1;
    case WM_COMMAND:
      switch(wParam) {
        case IDOK:
          onOK();
          return 0;
        case IDCANCEL: EndDialog(hdlg, 0);
      }
  }
  return 0;
}


ciao...
BruNews, MVP VC++
Messages postés
361
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 mars 2015

merci

j'avais bien sous classé mon edit
il me manquait juste le WM_PASTE