⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 balloontip.cpp

📁 操作系统实验演示代码(三个实验
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************
File:        BalloonTip.cpp

Description: This file contains the module for creating a a balloon tip which can
             be shown anywhere on a parent window
             

Created: Nov 1, 2001
Author:  Prateek Kaul
e-mail:  kaulpr@yahoo.com

Compiler with version number : Visual C++ 6.0


Copyright (c) 2001, Prateek Kaul
All rights Reserved.

The copyright to the computer program(s) herein is the property of Prateek Kaul
The program(s) may be used and/or copied only with the written permission of 
Prateek Kaul or in accordance with the terms and conditions stipulated
in the agreement/contract under which the program(s) have been supplied.
********************************************************************************/

#include "stdafx.h"
#include "BalloonTip.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif



/*----------------------------------------------------------------------------
   Message map
----------------------------------------------------------------------------*/

BEGIN_MESSAGE_MAP(CBalloonTip, CFrameWnd)
	//{{AFX_MSG_MAP(CBalloonTip)
	ON_WM_TIMER()
	ON_WM_LBUTTONDOWN()
	ON_WM_RBUTTONDOWN()
	ON_WM_CREATE()
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/*-----------------------------------------------------------------------------
 Function : CBalloonTip::CBalloonTip()

 Created: Nov 1, 2001
 Author:  Prateek Kaul
 e-mail:  kaulpr@yahoo.com

 Abstract : Constructor

 Parameters : 
    1. strMessage -> Message to be shown in the balloon
    2. lf         -> LOGFONT structure from which the the message font
                     will be created.
    3. bBalloonUp -> Is the balloon up or upside down?
    
 Return Value : none

 Exceptions : none

 Revisions : none
----------------------------------------------------------------------------*/

CBalloonTip::CBalloonTip(CString strMessage, LOGFONT lf, BOOL bBalloonUp)
{
    m_strMessage       = strMessage;
    m_bBalloonUp       = bBalloonUp;
    
    VERIFY(m_fontBalloonText.CreateFontIndirect(&lf));
}



/*-----------------------------------------------------------------------------
 Function : CBalloonTip::~CBalloonTip()

 Created: Nov 1, 2001
 Author:  Prateek Kaul
 e-mail:  kaulpr@yahoo.com

 Abstract : Destructor

 Parameters : none
    
 Return Value : none

 Exceptions : none

 Revisions : none
----------------------------------------------------------------------------*/

CBalloonTip::~CBalloonTip()
{
}




/*-----------------------------------------------------------------------------
 Function : CBalloonTip::Show()

 Created: Nov 1, 2001
 Author:  Prateek Kaul
 e-mail:  kaulpr@yahoo.com

 Abstract : Creates the CBalloonTip on the heap, forces heap creation

 Parameters : 
    1. pt -> Point of the balloon tip
    2. size -> Size of the window(width and height)
    3. strMessage -> Message to be shown in the balloon
    4. nSecs -> Seconds for which the balloon will be shown
    5. lf -> LOGFONT structure from which the the message font
             will be created.
    6. bBalloonUp -> Is balloon up or upside down?

 Return Value : void

 Exceptions : none

 Revisions : none
----------------------------------------------------------------------------*/

CBalloonTip* CBalloonTip::Show(CPoint pt, CSize size, CString strMessage, LOGFONT lf, UINT nSecs, BOOL bBalloonUp)
{
    if( CBalloonTip::nBalloonInstances != 0) // No window creation if already one instance of the class
    {
        return NULL;
    }

    CBalloonTip* pBalloonTip = new CBalloonTip(strMessage, lf, bBalloonUp);
    
    CBalloonTip::nBalloonInstances = 1; // Only one instance of window possible.
        
    UINT nRectLeft;
	UINT nRectRight;
	UINT nRectTop;  
	UINT nRectBottom;
	
    // Rectangle co-ordinates w.r.t balloon tip point
	// Balloon tip at CPoint pt shold remain there without change in window size
    if (bBalloonUp)
    {
        nRectLeft   = pt.x - (size.cx * 0.65);
	    nRectRight  = pt.x + (size.cx * 0.35);
	    nRectTop    = pt.y - size.cy;
	    nRectBottom = pt.y;
    }
    else
    {
        nRectLeft   = pt.x - (size.cx * 0.35);
	    nRectRight  = pt.x + (size.cx * 0.65);
	    nRectTop    = pt.y;
	    nRectBottom = pt.y + (size.cy);
    }
        
	pBalloonTip->Create(CRect(nRectLeft, nRectTop, nRectRight, nRectBottom));    
    pBalloonTip->MakeVisisble(nSecs);

    return pBalloonTip;
}





/*-----------------------------------------------------------------------------
 Function : CBalloonTip::MakeVisible()

 Created: Nov 1, 2001
 Author:  Prateek Kaul
 e-mail:  kaulpr@yahoo.com

 Abstract : Shows the balloon and sets the timer for it's eventual destruction.

 Parameters : 
    1. nSecs -> Seconds for the balloon to be shown
    
 Return Value : none

 Exceptions : none

 Revisions : none
----------------------------------------------------------------------------*/

void CBalloonTip::MakeVisisble(UINT nSecs)
{
    ASSERT(nSecs > 0);

    SetTimer(ID_TIMER, (nSecs * 1000), NULL);
        
    CRect rect;
    GetWindowRect(&rect);

    // Caption bar height to offeset when the balloon is shown
    int nCaptionBarSize = ::GetSystemMetrics(SM_CYCAPTION);
    int nVerticalBorderSize = ::GetSystemMetrics(SM_CYSIZEFRAME);

    if(m_bBalloonUp)
    {
        // Account for the missing title bar and border thickness in the 3rd parameter
        // as the balloon shifts up by the height of title bar and window tickness
        SetWindowPos(
            &wndTopMost,
            m_rectWindow.left, 
            (m_rectWindow.top + nCaptionBarSize + (2 * nVerticalBorderSize)),
            m_rectWindow.right,
            m_rectWindow.bottom, 
            SWP_SHOWWINDOW | SWP_NOACTIVATE
        );
    }
    else
    {
        // Account for the missing title bar and border thickness in the 3rd parameter
        // as the balloon shifts up by the height of window tickness.
        SetWindowPos(
            &wndTopMost, 
            m_rectWindow.left,
            m_rectWindow.top - nVerticalBorderSize,
            m_rectWindow.right, 
            m_rectWindow.bottom,
            SWP_SHOWWINDOW | SWP_NOACTIVATE
        );
    }
}




/*-----------------------------------------------------------------------------
 Function : CBalloonTip::OnTimer()

 Created: Nov 1, 2001
 Author:  Prateek Kaul
 e-mail:  kaulpr@yahoo.com

 Abstract : Gets called by MFC for an WM_TIMER message

 Parameters : 
        1. nIDEvent -> Timer ID    

 Return Value : void

 Exceptions : none

 Revisions : none
----------------------------------------------------------------------------*/

void CBalloonTip::OnTimer(UINT nIDEvent) 
{
    KillTimer(ID_TIMER);
    DestroyWindow();
}




/*-----------------------------------------------------------------------------
 Function : CBalloonTip::OnLButtonDown()

 Created: Nov 1, 2001
 Author:  Prateek Kaul
 e-mail:  kaulpr@yahoo.com

 Abstract : Gets called by MFC for an WM_LBUTTONDOWN message

 Parameters : 
        See MFC documentation

 Return Value : void

 Exceptions : none

 Revisions : none
----------------------------------------------------------------------------*/

void CBalloonTip::OnLButtonDown(UINT nFlags, CPoint point) 
{
   	KillTimer(ID_TIMER);
    DestroyWindow();
}




/*-----------------------------------------------------------------------------
 Function : CBalloonTip::OnRButtonDown()

 Created: Nov 1, 2001
 Author:  Prateek Kaul
 e-mail:  kaulpr@yahoo.com

 Abstract : Gets called by MFC for an WM_RBUTTONDOWN message

 Parameters : 
        See MFC documentation

 Return Value : void

 Exceptions : none

 Revisions : none
----------------------------------------------------------------------------*/

void CBalloonTip::OnRButtonDown(UINT nFlags, CPoint point) 
{
    KillTimer(ID_TIMER);
    DestroyWindow();
}




/*-----------------------------------------------------------------------------
 Function : CBalloonTip::OnCreate()

 Created: Nov 1, 2001
 Author:  Prateek Kaul
 e-mail:  kaulpr@yahoo.com

 Abstract : Gets called by MFC for an WM_CREATE message

 Parameters : 
        See MFC documentation

 Return Value : int

 Exceptions : none

 Revisions : none
----------------------------------------------------------------------------*/

int CBalloonTip::OnCreate(LPCREATESTRUCT lpCreateStruct) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -