ToolTip with Popup Sound

Can we do something to make a tooltip attracts the user
attention on it a little more? If the tooltip plays a sound when
it pops up then maybe the things should get better. Well, this is
a small class called CWavTipCtrl that inherits
from CToolTipCtrl and adds exactly this feature.

Implementation details

The key points in the control implementation are:

How to play a wave file resource?

How to understand when the tooltip window pops up?

The first argument is covered by the article "Play Wav Resource"
by Anthony Petruso.
The answer to the second question isn't so trivial as you can
think. The first idea that comes in mind is to handle the
WM_SHOWWINDOW message: wrong! To find the solution, I browsed in
the MFC source code. Reading the code, it was clear that the
tooltip "pops up" thanks to a call to SetWindowPos()
that moves its window at the top of the Z-order (the depth order
of all the visible windows). The message to be handled is
therefore WM_WINDOWPOSCHANGED. But this message is sent also when
the tooltip window is dismissed. For this reason, in the
OnWindowPosChanged() function, it is necessary to check if the lpwndpos->flag
field contains the SWP_SHOWWINDOW flag. Here is the code:

Using this class is very simple. Include the WavTipCtrl.cpp
(and .h) in your project. Then add a tooltip to your window. For
example, if you want to add CWavTipCtrl to a dialog, first add a
tooltip component to it, then go in to the header file of the
dialog class, #include "WavTipCtrl.h" and replace
CToolTipCtrl with CWavTipCtrl. Include a custom wave resource in
your project (e.g. IDR_TOOLTIP_SOUND). Now, just add a call to SetPopupSound(IDR_TOOLTIP_SOUND)
in the OnInitDialog() body of your dialog. A last important
thing: be aware that your program should be linked with the
'winmm.lib' static library, or a link error will occur.

Operations for CWawTipCtrl

void SetPopupSound(WORD wResourceID);
WORD GetPopupSound() const;

Note: If you don't want your CWavTipCtrl uses the popup sound,
call SetPopupSound(NULL): NULL is considered as an invalid wave
resource ID.

Author's note

I'm continuously working to improve this control. I'll be
grateful to you if you mail me your comments, advice, or bug
apparition reports!.

Updated: May, 21 1998

Comments

Try TTN_SHOW for detection

Posted by Legacy
on 04/22/2000 12:00am

Originally posted by:
Steven

You might try using TTN_SHOW to make the code more direct and self documenting. Also, this precludes the need to check for hide/show.

Top White Papers and Webcasts

Live Event Date: March 19, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT
The 2015 Enterprise Mobile Application Survey asked 250 mobility professionals what their biggest mobile challenges are, how many employees they are equipping with mobile apps, and their methods for driving value with mobility.
Join Dan Woods, Editor and CTO of CITO Research, and Alan Murray, SVP of Products at Apperian, as they break down the results of this survey and discuss how enterprises are using mobile application management and private …

The mobile market is white hot. Building a well-crafted product development plan that addresses market research, strategy, design, and development will provide the greatest chance for success. Each phase of an app's lifecycle is critical to the its overall success and feeds into the next step of the process of product development for the app. This white paper examines the five key phases of mobile app creation, one by one, to understand how they work together to help create a successful mobile app.