Ottimo lavoro; un paio di consigli aggiuntivi:
  • invece di chiamare la WndProc "vera" direttamente, sarebbe meglio usare CallWindowProc per richiamarla; non so se in questo caso si applichi il suo effettivo scopo, ma usarla non costa niente e si va sul sicuro;
  • invece di usare una variabile globale per memorizzare la wndproc precedente e/o altri dati, potresti allocare sull'heap una struttura in cui memorizzi tutte queste informazioni e metterne l'indirizzo nei dati utente associati all'editbox (sempre tramite SetWindowLongPtr), in modo da poter gestire indipendentemente più editbox subclassate. Per un esempio, dai un'occhiata qui (righe 553-598) e qui (righe 40-45).