May I suggest that the WidgetMessageQueueProcess function be changed? Looping continuously processing all the messages in the queue can take a long time, and if you are communicating with a serial trunk that is timing critical, a device can fall off the trunk. Instead of:
while(g_ui32MQRead != g_ui32MQWrite)
change the while to if. That way the function can be called on a regular basis along with serial processing functions without having to make the serial functions interrupt routines. I haven't seen any difference in screen write time.