I think this is one of those cases where an implementation detail forces you to use a tool in a specific way. ie. code stored in a hierarchical filesystem forces you to structure your program in such way.
The problem with hierarchies is that they are strict and rigid and force you to put your code in a dichotomy that is very ill suited for a multi dimensional problem like computer programs.
What you want is to abstract away the file system from the programmer and treat it as an optimization problem for the IDE to feed into the compiler.
Ultimately the source code would be stored in database that is closely modeled after the language specification, as a normalized, canonical representation of the program.
All the features that you wrote about would then be views on top of that database. That way you can choose a representation that fits the task you are currently trying to solve.
Big problem I see with this, like others have said, is the tight coupling to the IDE.
But it could be interesting nevertheless, I actually thought about this exact thing before.
I really don't like these kind of tests. Yes, they are called "c++ tests", but what is really tested here is specialized knowledge of a few very specific langauge concepts probably containing more than one gotcha. Almost like a trick question, and I don't like trick questions.
What I'd be more interested in a candidate is quickly grasping large-scale code structure, ability to visualize class dependencies, debugging, refactoring, all in all skills that are not bound to a specific language.
I personally never bother with Windows messages and use the API functions directly. Look up GetCursorPos() for mouse movement and GetAsyncKeyState() for keypresses. These will give you immediate values which you can process at your own will.
GetAsyncKeyState() can miss key presses when the framerate is low or the key was pressed very quickly.
I noticed one thing while looking through your header files:
There are no includes and/or forward declarations in there. Apparently they work only because you include all needed stuff in the main.cpp before including your own header files.
While this works now, you will have to do the same if you want to use them in another project. IMO these headers should be self contained and not rely on the structure of the source file in which they are included.