Event von Edit abfangen



  • ich habe das Handle von einem edit in einem fremden programm. jetzt möchte ich den EN_CHANGE event abfangen.
    irgendwie kriege ich das einfach nciht hin.. seit ca 3 tage irre ich durch msdn und google. und da mein englisch noch nicht so stark ist, wird mir langsam richtig schlecht von der msdn 😞

    hat jemand ein kurzes beispiel, wie man einen Event abfängt?
    oder ein Tut (deutsch währe super)?

    bin für alles dankbar
    BigNeal

    [edit]zu bemerken währe noch, dass ich nicht gerade viel erfahrung habe mit SendMessage etc[/edit]



  • Verwende einfach folgenden Code:

    WNDPROC wpOrigEditProc;
    
    // Subclass Procedure 
    LRESULT APIENTRY SubclassProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { 
        if (uMsg == ...) { 
          ...
          return true;
        }
    
        return CallWindowProc(wpOrigEditProc, hwnd, uMsg, 
            wParam, lParam); 
    }
    
    // Subclassing starten
    void startSubclass(HWND hwndControl) {
      wpOrigEditProc = (WNDPROC) SetWindowLong(hwndControl, 
                     GWL_WNDPROC, (LONG) SubclassProc); 
    }
    
    // Subclassing beenden - nicht vergessen !!!!
    void stopSubclass() {
      SetWindowLong(hwndEdit, GWL_WNDPROC, 
        (LONG) wpOrigEditProc);  
    }
    


  • Die EN_CHANGE wird über die WM_COMMAND an das Parent des Edit-Controls gesendet:

    case WM_COMMAND:
      if (LOWORD(wParam)==ID_EDITCTRL)
      {
         if (HIWORD(wParam)==EN_CHANGE)
         {
            MessageBox(0,"mööööööp!","EN_CHANGE!!",MB_OK);
         }
      }
      break;
    


  • danke für die hilfe, wird mich sicher weiter bringen.
    nur ich (oder mein Compiler) hat mit dem Code noch ein problem.
    ich habe die funktionen mal definiert ohne irgendwas aufzurufen und mein Compiler findet an dieser stelle 2 fehler 😞

    return CallWindowProc(wpOrigEditProc, hwnd, uMsg,wParam, lParam);
    

    [C++ Fehler] Unit1.cpp(32): E2034 Konvertierung von 'long (__stdcall *)(void *,unsigned int,unsigned int,long)' nach 'int (__stdcall *)()' nicht möglich
    [C++ Fehler] Unit1.cpp(32): E2342 Keine Übereinstimmung des Typs beim Parameter 'lpPrevWndFunc' ('int (__stdcall *)()' erwartet, 'long (__stdcall *)(void *,unsigned int,unsigned int,long)' erhalten)

    hat jemand eine idee, was das sein könnte? werde nicht ganz schlau daraus. der Funktionsaufruf ist nach msdn ja richtig



  • Problem hat sich erledigt siehe http://www.c-plusplus.net/forum/viewtopic-var-t-is-110613.html

    und noch ne anmerkung:

    BigNeal schrieb:

    ich habe das Handle von einem edit in einem fremden programm. jetzt möchte ich den EN_CHANGE event abfangen.

    SetWindowLong(hwndEdit, GWL_WNDPROC,(LONG) wpOrigEditProc);
    

    MSDN schrieb:

    GWL_WNDPROC

    Sets a new address for the window procedure.

    Windows NT/2000/XP: You cannot change this attribute if the window does not belong to the same process as the calling thread.

    falls das Fenster in einem anderem Prozess ist, muss das ganze über eine DLL gelöst werden, was ich jetzt auch hingekriegt habe 😃



  • und wie, wenn man fragen darf?



  • über einen hook
    mit SetWindowsHookEx
    und diesem Tut für den BCB für DLL's mit Hooks http://bcb-tutorial.c-plusplus.net/DLL_Tutorial/artikel15.html


Anmelden zum Antworten