Many messages that should be presented to the user probably aren't crucial and so should probably not interrupt their flow. The information may not be important enough to warrant displaying another window or it may be time-based, and so if the app isn't active, it may no longer be relevant when they come back. A better approach to this sort of information is present in most operating systems: a notification area.
Initially presented as part of a system tray, notifications are displayed as a bubble or call-out area that can catch a user's attention if they're ready to be distracted or could be ignored otherwise. The more modern way for this to be presented is a notification area (which may not always be visible) in which all application notifications are placed. This provides a way to group all messages for later processing at a more convenient time. A preview is normally shown so it's a good idea to keep the message short.
Notifications can be created using built-in APIs for many of the frameworks we've discussed, such as NewQSystemTrayIcon().ShowMessage() in Qt or NewNotifyIcon().ShowMessage() in Walk. Using these functions will typically display the notification in the current platform's default notification area, leading to a consistent user experience. This, however, means that even on GUI toolkits that aim to be completely consistent across multiple platforms, this code will behave differently, so be sure to test all supported platforms and bear the differences in mind when writing documentation: