Turns out PR #4243 actually introduced a bug that appeared to implement the feature. The previous implementation had the effect of intercepting all keypresses and routing them to the main window. This fixes that bug by using `CDialog` instead of `CWnd`. It also turns out that the `hWnd` window handle for some reason does not match the expected window, but fortunately, this implementation is only called in the correct window so the restriction is not needed.
Override some MFC signal paths to prevent Enter and Escape from doing their default behavior. Also add a "save changes" prompt to the Cancel and Close buttons.
Fixes#4240.