MainDialog.cpp
上传用户:zhoucj12
上传日期:2007-01-02
资源大小:15k
文件大小:3k
源码类别:

RichEdit

开发平台:

Visual C++

  1. #include "StdAfx.h"
  2. #include "RichEdit20.h"
  3. #include "MainDialog.h"
  4. #ifdef _DEBUG
  5. #define new DEBUG_NEW
  6. #undef THIS_FILE
  7. static char THIS_FILE[] = __FILE__;
  8. #endif
  9. CMainDialog::CMainDialog(
  10. CWnd* in_pParent )
  11. : CDialog( CMainDialog::IDD, in_pParent )
  12. {
  13. //{{AFX_DATA_INIT( CMainDialog )
  14. //}}AFX_DATA_INIT
  15. m_hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME ) ;
  16. m_crLink = AfxGetApp()->LoadIcon( IDC_LINKHAND ) ;
  17. }
  18. void CMainDialog::DoDataExchange(
  19. CDataExchange* pDX )
  20. {
  21. CDialog::DoDataExchange( pDX ) ;
  22. //{{AFX_DATA_MAP( CMainDialog )
  23. DDX_Control( pDX, IDC_RICHEDIT,   m_RichEdit   ) ;
  24. DDX_Control( pDX, IDC_RICHEDITEX, m_RichEditEx ) ;
  25. //}}AFX_DATA_MAP
  26. }
  27. BEGIN_MESSAGE_MAP( CMainDialog, CDialog )
  28. //{{AFX_MSG_MAP( CMainDialog )
  29. ON_WM_PAINT()
  30. ON_WM_QUERYDRAGICON()
  31. ON_NOTIFY( EN_LINK, IDC_RICHEDITEX, OnRichEditExLink )
  32. //}}AFX_MSG_MAP
  33. END_MESSAGE_MAP()
  34. BOOL CMainDialog::OnInitDialog()
  35. {
  36. CDialog::OnInitDialog() ;
  37. SetIcon( m_hIcon, TRUE ) ;
  38. SetIcon( m_hIcon, FALSE ) ;
  39. m_RichEditEx.SetEventMask( m_RichEdit.GetEventMask() | ENM_LINK ) ; 
  40. m_RichEditEx.AutoURLDetect( TRUE ) ;
  41. return TRUE ;
  42. }
  43. void CMainDialog::OnPaint() 
  44. {
  45. if( IsIconic() )
  46. {
  47. CPaintDC l_PaintDC( this ) ;
  48. SendMessage( WM_ICONERASEBKGND, ( WPARAM )l_PaintDC.GetSafeHdc(), 0 ) ;
  49. ////////////////////////////////////////////////////////////////////////
  50. // Center icon in client rectangle
  51. ////////////////////////////////////////////////////////////////////////
  52. int l_cIconX = ::GetSystemMetrics( SM_CXICON ) ;
  53. int l_cIconY = ::GetSystemMetrics( SM_CYICON ) ;
  54. CRect l_rcClient;
  55. GetClientRect( &l_rcClient ) ;
  56. int l_nX = ( l_rcClient.Width()  - l_cIconX + 1 ) / 2 ;
  57. int l_nY = ( l_rcClient.Height() - l_cIconY + 1 ) / 2 ;
  58. ////////////////////////////////////////////////////////////////////////
  59. // Draw the icon
  60. ////////////////////////////////////////////////////////////////////////
  61. l_PaintDC.DrawIcon( l_nX, l_nY, m_hIcon ) ;
  62. }
  63. else
  64. {
  65. CDialog::OnPaint() ;
  66. }
  67. }
  68. HCURSOR CMainDialog::OnQueryDragIcon()
  69. {
  70. return ( HCURSOR )m_hIcon ;
  71. }
  72. void CMainDialog::OnRichEditExLink( 
  73. NMHDR*   in_pNotifyHeader, 
  74. LRESULT* out_pResult )
  75. {
  76. ENLINK* l_pENLink = ( ENLINK* )in_pNotifyHeader ;
  77. *out_pResult = 0 ;
  78. switch( l_pENLink->msg )
  79. {
  80. default:
  81. {
  82. }
  83. break ;
  84. case WM_SETCURSOR:
  85. {
  86. if( m_crLink != NULL )
  87. {
  88.     ::SetCursor( m_crLink ) ;
  89. *out_pResult = 1 ;
  90. }
  91. }
  92. break ;
  93. case WM_LBUTTONDOWN:
  94. {
  95. CString l_URL ;
  96. CHARRANGE l_CharRange ;
  97. m_RichEditEx.GetSel( l_CharRange ) ;
  98. m_RichEditEx.SetSel( l_pENLink->chrg ) ;
  99. l_URL = m_RichEdit.GetSelText() ;
  100. m_RichEditEx.SetSel( l_CharRange ) ;
  101. CWaitCursor l_WaitCursor ;
  102. ShellExecute( this->GetSafeHwnd(), _T( "open" ), l_URL, NULL, NULL, SW_SHOWNORMAL ) ;
  103. *out_pResult = 1 ;
  104. }
  105. break ;
  106. case WM_LBUTTONUP:
  107. {
  108. *out_pResult = 1 ;
  109. }
  110. break ;
  111. }
  112. }