What's the main reason you want to have a separate model for each screen? Just simplicity? The Model is passed around to any Presenter that becomes inactive, and is also ticked by the HAL. You could create some interfaces for presenters that have a reference to the model and bundle the methods that are relevant to that presenter. Model.cpp can become large, given enough screens, so bundling relevant methods based on screen type can be a good idea.
So, have the generic send/receive methods in Model.cpp but have the concrete interface for sending Presenter-type messages in a concrete interface so that no screen specific logic is placed in Model.cpp. Also, if you're checking OS message queues you could also have those inside the Presenter specific interface and simply tick your presenter objects whenever Model::tick() is called (Maybe even only tick the interface for that presenter if its view is active) and only check the messages that are relevant to your presenter.
Does that make sense?
/Martin