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

IP电话/视频会议

开发平台:

Visual C++

  1. // text.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "text.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CText
  12. CText::CText( CDrawView * view ) : CDraw( view )
  13. {
  14. this->type = TEXT;
  15. this->text = "";
  16. this->Create( WS_BORDER | WS_CHILD | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL , CRect( 10 , 10 , 200 , 30 ) , this->view , 0 );
  17. }
  18. CText::~CText()
  19. {
  20. }
  21. BEGIN_MESSAGE_MAP(CText, CEdit)
  22. //{{AFX_MSG_MAP(CText)
  23. //}}AFX_MSG_MAP
  24. END_MESSAGE_MAP()
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CText message handlers
  27. void CText::LButtonDown( UINT nFlags , CPoint point )
  28. {
  29. point -= this->view->GetScrollPosition( );
  30. ::ClipCursor( NULL );
  31. this->GetWindowText( this->text );
  32. if(  this->text.IsEmpty( ) )
  33. {
  34. this->SetWindowPos( NULL , point.x - 2 , point.y , 0 , 0 , SWP_NOSIZE );
  35. this->ShowWindow( SW_SHOW );
  36. this->SetFocus( );
  37. }
  38. else
  39. this->view->SendMessage( WM_LBUTTONUP , nFlags , MAKEWPARAM( point.x , point.y ) );
  40. }
  41. void CText::LButtonUp( UINT nFlags , CPoint point )
  42. {
  43. CRect rc;
  44. this->GetWindowRect( &rc );
  45. this->view->ScreenToClient( &rc );
  46. rc.OffsetRect( this->view->GetScrollPosition( ) );
  47. CClientDC dc( this );
  48. dc.DrawText( this->text , &rc , DT_CALCRECT );
  49. this->DestroyWindow( );
  50. this->rgn.CreateRectRgn( rc.left , rc.top , rc.right , rc.bottom );
  51. this->Draw( );
  52. this->view->Invalidate( );
  53. }
  54. void CText::MouseMove( UINT nFlags , CPoint point )
  55. {
  56. }
  57. LRESULT CText::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  58. {
  59. LRESULT result = CEdit::WindowProc(message, wParam, lParam);
  60.     //键盘输入
  61. if( message == WM_CHAR )
  62. {
  63. CClientDC dc( this );
  64. this->GetWindowText( this->text );
  65. CRect rc , rcClient;
  66. dc.DrawText( this->text , &rc , DT_CALCRECT );
  67. this->GetClientRect( &rcClient );
  68. if( rc.Width( ) > rcClient.Width( ) || rc.Height( ) > rcClient.Height( ) )
  69. this->SetWindowPos( NULL , 0 , 0 , rc.Width( ) + 5 , rc.Height( ) + 5 , SWP_NOMOVE );
  70. }
  71. return result;
  72. }
  73. CDC * CText::Draw( CDC * pDC )
  74. {
  75. if( pDC == NULL )
  76. pDC = this->view->GetMemDC( );
  77. if( this->rgn.GetSafeHandle( ) )
  78. {
  79. CRect rc;
  80. this->rgn.GetRgnBox( &rc );
  81. pDC->SetBkMode( TRANSPARENT );
  82. pDC->SetTextColor( this->GetColor( ) );
  83. pDC->DrawText( this->text , &rc , DT_LEFT );
  84. }
  85. return pDC;
  86. }