文章来源:www.codeproject.com/Articles/19…
Understanding the CMsgBox class
CMsgBox is a class which implements auto-close functionality. This class is derived from the CWnd class. It exposes a method called "MessageBox()", which in turn would call CWnd::MessageBox() to display a message box.
Getting the auto-close functionality implemented is very simple. In the CMsgBox::MessageBox() method, we start a timer (SetTimer() method) just before we call the CWnd::MessageBox API. In the OnTimer method, we try to find the message box window by using its window name (caption). Once found, we post a WM_CLOSEmessage to close the message box. That's it !
void CMsgBox::MessageBox(CString sMsg, CString sCaption, UINT nSleep,
UINT nFlags, bool bAutoClose)
{
// Save the caption, for finding this
// message box window later
m_Caption = sCaption;
// If auto close then, start the timer.
if(bAutoClose)
SetTimer(100, nSleep, NULL);
// Show the message box
CWnd::MessageBox(sMsg, sCaption, nFlags);
}
void CMsgBox::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
BOOL bRetVal = false;
// Find the message box window using the caption
CWnd* pWnd = FindWindow(NULL, m_Caption);
if(pWnd != NULL)
{
// Send close command to the message box window
::PostMessage(pWnd->m_hWnd, WM_CLOSE, 0, 0);
}
// Kill the timer
KillTimer(100);
CWnd::OnTimer(nIDEvent);
}
Using the code
Add these two files to your project: "MsgBox.cpp" and "MsgBox.h". #include "MsgBox.h" wherever appropriate. Create the CMsgBox object as:
CMsgBox obj(this);
Or like this:
CMsgBox obj;
obj.SetParent(this);
Use the MessageBox() method for displaying the message box. Set the bAutoClose parameter to false if you don't need the auto-close functionality.
obj.MessageBox("This message box will auto close in 2 seconds.",
"Auto Close Msg Box", 2000, MB_OK | MB_ICONINFORMATION);
\