TipDialog.cpp
上传用户:popouu88
上传日期:2013-02-11
资源大小:2894k
文件大小:4k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // TipDialog.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "TipDialog.h"
  5. #include "mmsystem.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. #pragma comment( lib , "winmm.lib" )
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CTipDialog dialog
  14. bool CTipDialog::canShow = true;
  15. CTipDialog * CTipDialog::tipWnd = NULL;
  16. CBitmap CTipDialog::bmp;
  17. CTipDialog::CTipDialog(CWnd* pParent /*=NULL*/) : CDialog(CTipDialog::IDD, pParent )
  18. {
  19. //{{AFX_DATA_INIT(CTipDialog)
  20. //}}AFX_DATA_INIT
  21. this->text = "";
  22. this->up = true;
  23. this->delay = 0;
  24. if( ! CTipDialog::bmp.GetSafeHandle( ) )
  25. CTipDialog::bmp.LoadBitmap( IDB_SESSION_TIP_BITMAP );
  26. }
  27. void CTipDialog::DoDataExchange(CDataExchange* pDX)
  28. {
  29. CDialog::DoDataExchange(pDX);
  30. //{{AFX_DATA_MAP(CTipDialog)
  31. //}}AFX_DATA_MAP
  32. }
  33. BEGIN_MESSAGE_MAP(CTipDialog, CDialog)
  34. //{{AFX_MSG_MAP(CTipDialog)
  35. ON_WM_PAINT()
  36. ON_WM_TIMER()
  37. //}}AFX_MSG_MAP
  38. END_MESSAGE_MAP()
  39. /////////////////////////////////////////////////////////////////////////////
  40. // CTipDialog message handlers
  41. void CTipDialog::ShowTip( const char * tip , int delay )
  42. {
  43. if( ! CTipDialog::canShow )
  44. return;
  45. if( CTipDialog::IsWindow( ) )
  46. {
  47. CTipDialog::tipWnd->text += "n" + ( CString )tip;
  48. }
  49. else
  50. {
  51. CTipDialog::tipWnd = new CTipDialog( CWnd::GetDesktopWindow( ) );
  52. if( ! CTipDialog::tipWnd ) return;
  53. CTipDialog::tipWnd->text = tip;
  54. CTipDialog::tipWnd->delay = delay;
  55. CTipDialog::tipWnd->Create( CTipDialog::IDD );
  56. }
  57. }
  58. BOOL CTipDialog::OnInitDialog( ) 
  59. {
  60. CDialog::OnInitDialog();
  61. BITMAP bm;
  62. CTipDialog::bmp.GetBitmap( &bm );
  63. CRect rc( 0 , 0 , bm.bmWidth , bm.bmHeight );
  64. this->SetWindowPos( NULL , 0 , 0 , rc.Width( ) , rc.Height( ) , SWP_NOMOVE | SWP_NOACTIVATE );
  65. this->movePoint.x = ::GetSystemMetrics( SM_CXSCREEN ) - rc.Width( ) - 5;
  66. this->movePoint.y = ::GetSystemMetrics( SM_CYSCREEN ) - 5;
  67. this->tagetPoint.x = this->movePoint.x;
  68. this->tagetPoint.y = this->movePoint.y - rc.Height( );
  69. this->SetTimer( 1 , 10 , NULL );
  70. ::PlaySound( MAKEINTRESOURCE( IDR_TIP_WAVE ) , AfxGetResourceHandle() , SND_RESOURCE | SND_ASYNC );
  71. return TRUE;
  72. }
  73. void CTipDialog::OnPaint( ) 
  74. {
  75. CPaintDC dc( this ); 
  76. CDC memDC;
  77. memDC.CreateCompatibleDC( &dc );
  78. memDC.SelectObject( &CTipDialog::bmp );
  79. CRect rc , rcText;
  80. this->GetClientRect( &rc );
  81. dc.BitBlt( 0 , 0 , rc.Width( ) , rc.Height( ) , &memDC , 0 , 0 , SRCCOPY );
  82. rc.top += 25;
  83. rcText = rc;
  84. CFont f;
  85. f.CreatePointFont( 100 , "新宋体" );
  86. dc.SelectObject( &f );
  87.     //计算矩形
  88. dc.DrawText( text , &rcText , DT_CALCRECT | DT_WORDBREAK );
  89. rcText.OffsetRect( ( rc.Width( ) - rcText.Width( ) ) / 2 , ( rc.Height( ) - rcText.Height( ) ) / 2 );
  90. dc.SetBkMode( TRANSPARENT );
  91. dc.SetTextColor( RGB( 0 , 0 , 255 ) );
  92. dc.DrawText( text , &rcText , DT_VCENTER | DT_CENTER | DT_WORDBREAK );
  93. }
  94. void CTipDialog::OnTimer( UINT nIDEvent ) 
  95. {
  96. CDialog::OnTimer( nIDEvent );
  97. if( nIDEvent == 1 )
  98. {
  99. if( this->up )
  100. {
  101. if( this->movePoint.y > this->tagetPoint.y )
  102. {
  103. this->SetWindowPos( NULL , this->movePoint.x , this->movePoint.y , 0 , 0 , SWP_NOSIZE | SWP_NOACTIVATE );
  104. this->movePoint.y -- ;
  105. }
  106. else
  107. {
  108. this->KillTimer( 1 );
  109. this->SetTimer( 2 , this->delay * 1000 , NULL );
  110. this->up = false;
  111. }
  112. }
  113. else
  114. {
  115. if( this->movePoint.y < ::GetSystemMetrics( SM_CYSCREEN ) - 5 )
  116. {
  117. this->SetWindowPos( NULL , this->movePoint.x , this->movePoint.y , 0 , 0 , SWP_NOSIZE | SWP_NOACTIVATE );
  118. this->movePoint.y ++ ;
  119. }
  120. else
  121. {
  122. CTipDialog::tipWnd = NULL;
  123. this->DestroyWindow( );
  124. }
  125. }
  126. }
  127. else if( nIDEvent == 2 )
  128. {
  129. this->KillTimer( 2 );
  130. this->SetTimer( 1 , 10 , NULL );
  131. }
  132. }
  133. LRESULT CTipDialog::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  134. {
  135. if( message == WM_CLOSE )
  136. {
  137. this->DestroyWindow( );
  138.     return NULL;
  139. }
  140. else
  141. return CDialog::WindowProc(message, wParam, lParam);
  142. }
  143. void CTipDialog::PostNcDestroy( ) 
  144. {
  145. delete this;
  146. }