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

📄 tipdialog.cpp.svn-base

📁 股票软件源码
💻 SVN-BASE
字号:
// TipDialog.cpp : implementation file
//

#include "stdafx.h"
#include "TipDialog.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTipDialog dialog

CTipDialog::CTipDialog() : CXFDialog()
{
	m_clrBkground	=	RGB( 96, 64, 255 );
	m_nWaitSecs		=	5;
	m_bResetWhenMouseMove	=	FALSE;
}

CTipDialog::CTipDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
	: CXFDialog(lpszTemplateName, pParentWnd)
{
	m_clrBkground	=	RGB( 96, 64, 255 );
	m_nWaitSecs		=	5;
	m_bResetWhenMouseMove	=	FALSE;
}

CTipDialog::CTipDialog(UINT nIDTemplate, CWnd* pParentWnd)
	: CXFDialog(nIDTemplate,pParentWnd)
{
	m_clrBkground	=	RGB( 96, 64, 255 );
	m_nWaitSecs		=	5;
	m_bResetWhenMouseMove	=	FALSE;
}

CPoint CTipDialog::GetNormalPos()
{
	ASSERT( ::IsWindow(GetSafeHwnd()) );
	CRect rectDlg;
	GetWindowRect( &rectDlg );
	int x = ::GetSystemMetrics(SM_CXSCREEN) - rectDlg.Width() - 2;
	int y = ::GetSystemMetrics(SM_CYSCREEN) - rectDlg.Height() - ::GetSystemMetrics(SM_CYCAPTION) - 5;
	return CPoint(x,y);
}

void CTipDialog::SetAutoHide( int nWaitSecs, BOOL bResetWhenMouseMove )
{
	m_nWaitSecs = nWaitSecs;
	m_bResetWhenMouseMove = bResetWhenMouseMove;

	SetTimer( TIMER_TIPAUTOHIDE, m_nWaitSecs*1000, NULL );
}

void CTipDialog::Show( )
{
	CPoint pt = GetNormalPos();
	SetWindowPos( &CWnd::wndTopMost, pt.x, pt.y, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOACTIVATE );
}

void CTipDialog::Hide( )
{
	CPoint pt = GetNormalPos();
	SetWindowPos( &CWnd::wndTopMost, pt.x, pt.y, 0, 0, SWP_HIDEWINDOW | SWP_NOSIZE );
}

void CTipDialog::ShowGradual( )
{
	KillTimer( TIMER_TIPSHOWGRADUAL );
	KillTimer( TIMER_TIPHIDEGRADUAL );

	CPoint pt = GetNormalPos();
	CRect rectDlg;
	GetWindowRect( &rectDlg );
	int y = pt.y + rectDlg.Height();
	SetWindowPos( &CWnd::wndTopMost, pt.x, y, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOACTIVATE );
	SetTimer( TIMER_TIPSHOWGRADUAL, 12, NULL );
}

void CTipDialog::HideGradual( )
{
	KillTimer( TIMER_TIPSHOWGRADUAL );
	KillTimer( TIMER_TIPHIDEGRADUAL );
	SetTimer( TIMER_TIPHIDEGRADUAL, 12, NULL );
}

void CTipDialog::DoDataExchange(CDataExchange* pDX)
{
	CXFDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTipDialog)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTipDialog, CXFDialog)
	//{{AFX_MSG_MAP(CTipDialog)
	ON_WM_ERASEBKGND()
	ON_WM_LBUTTONDOWN()
	ON_WM_TIMER()
	ON_WM_RBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_MOUSEWHEEL()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTipDialog message handlers

BOOL CTipDialog::OnInitDialog()
{
	CXFDialog::OnInitDialog();

	if( !m_font.CreateStockObject( DEFAULT_GUI_FONT ) )
		m_font.CreateStockObject( ANSI_VAR_FONT );
	SetFont( &m_font );

	ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);

	Hide();

	SetAutoHide( 5, TRUE );

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CTipDialog::OnTimer(UINT nIDEvent) 
{
	CXFDialog::OnTimer(nIDEvent);

	if( TIMER_TIPAUTOHIDE == nIDEvent )
	{
		KillTimer( TIMER_TIPAUTOHIDE );
		HideGradual();
	}
	else if( TIMER_TIPHIDEGRADUAL == nIDEvent )
	{
		WINDOWPLACEMENT place;
		if( IsWindowVisible() && GetWindowPlacement( &place ) )
		{
			CPoint pt = GetNormalPos();
			int x = pt.x;
			int y = place.rcNormalPosition.top;
			y += 20;
			if( y >= GetSystemMetrics(SM_CYSCREEN) )
			{
				KillTimer( TIMER_TIPHIDEGRADUAL );
				SetWindowPos( NULL, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE );
			}
			else
				SetWindowPos( &CWnd::wndTopMost, x, y, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOACTIVATE );
		}
		else
		{
			KillTimer( TIMER_TIPHIDEGRADUAL );
			SetWindowPos( NULL, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE );
		}
	}
	else if( TIMER_TIPSHOWGRADUAL == nIDEvent )
	{
		WINDOWPLACEMENT place;
		if( GetWindowPlacement( &place ) )
		{
			CPoint pt = GetNormalPos();
			int x = pt.x;
			int y = place.rcNormalPosition.top;
			if( y >= pt.y )
				y -= 20;
			if( y <= pt.y )
			{
				y = pt.y;
				KillTimer( TIMER_TIPSHOWGRADUAL );
			}
			SetWindowPos( &CWnd::wndTopMost, x, y, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOACTIVATE );
		}
		else
			KillTimer( TIMER_TIPSHOWGRADUAL );
	}
}

BOOL CTipDialog::OnEraseBkgnd(CDC* pDC)
{
	CBrush	*pOldBrush = (CBrush *)pDC->SelectStockObject( NULL_BRUSH );
	CBrush	brush;
	brush.CreateSolidBrush( RGB( 0, 0, 128 ) );
	CRect	rect;
	GetClientRect( rect );
	
	BYTE	r	=	GetRValue( m_clrBkground );
	BYTE	g	=	GetGValue( m_clrBkground );
	BYTE	b	=	GetBValue( m_clrBkground );

	BYTE	bGray	=	BYTE( ( r*30L + g*59L + b*11L )/100 );
	if( bGray <= 128 )
	{
		r	=	255 - r;
		g	=	255 - g;
		b	=	255 - b;
	}
	
	int nNumColors = pDC->GetDeviceCaps( NUMCOLORS );
	if( nNumColors > 256 || -1 == nNumColors )
	{
		for( int i=255; i>=128; i-=3 )
		{
			brush.DeleteObject();
			
			if( bGray <= 128 )
				brush.CreateSolidBrush( RGB( 
					255 - MulDiv( r, i, 255),
					255 - MulDiv( g, i, 255),
					255 - MulDiv( b, i, 255) ) );
			else
				brush.CreateSolidBrush( RGB( 
					MulDiv( r, i, 255),
					MulDiv( g, i, 255),
					MulDiv( b, i, 255) ) );

			pDC->FillRect( CRect( rect.left + MulDiv( rect.Width(), (255-i+3), 128), 0, 
				rect.left + MulDiv( rect.Width(), (255-i), 128), rect.bottom),
				&brush );
		}
	}
	else
	{
		brush.DeleteObject( );
		brush.CreateSolidBrush( m_clrBkground ); //pDC->GetNearestColor( m_clrBkground ) );
		pDC->FillRect( rect, &brush );
	}
	pDC->SelectStockObject( NULL_BRUSH );
	GetClientRect( rect );	
	pDC->SelectObject( pOldBrush );
	return TRUE;
}

int CTipDialog::DoModal() 
{
	return CXFDialog::DoModal();
}

void CTipDialog::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CXFDialog::OnLButtonDown(nFlags, point);
	HideGradual();
}

void CTipDialog::OnRButtonDown(UINT nFlags, CPoint point) 
{
	CXFDialog::OnRButtonDown(nFlags, point);
	HideGradual();
}

void CTipDialog::OnMouseMove(UINT nFlags, CPoint point) 
{
	if( m_bResetWhenMouseMove )
	{
		KillTimer( TIMER_TIPAUTOHIDE );
		SetTimer( TIMER_TIPAUTOHIDE, m_nWaitSecs*1000, NULL );
	}
	CXFDialog::OnMouseMove(nFlags, point);
}

BOOL CTipDialog::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
	if( m_bResetWhenMouseMove )
	{
		KillTimer( TIMER_TIPAUTOHIDE );
		SetTimer( TIMER_TIPAUTOHIDE, m_nWaitSecs*1000, NULL );
	}
	return CXFDialog::OnMouseWheel(nFlags, zDelta, pt);
}

⌨️ 快捷键说明

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