When you write a call to a virtual method, the compiler automatically generates a call through the pointer for that method. This allows you to change the pointer to point to a new method later - in case you want to add new behavior without rewriting the old library. It's powerful, once you get used to it. The source code is more clean, much easier to read than the equivalent in C would be. Things are organized differently, but it's not as much of a change as all the hoopla would suggest.
Events are method calls.
You'd think with all the mystique surrounding them it would be more complicated than that - but it's not. In most cases, an event is called by a library function in response to a message received from Windows. You can create your own events and call them whenever you like. Win32 objects such as buttons and edit fields. A few years ago, library functions were short and simple.