Ha, reminds me of the days I used WINAPI programming. The message pump would be done with a simple while loop that has GetMessage(), TranslateMessage() and DispatchMessage().
That knowledge is still valuable for example in figuring out why a WPF app doesn’t update its Ui. We have more abstractions today but under the hood it’s still the same.