向RichEditCtrl中添加图片和URL功能

最近在写一个工具,需要用到RichEditCtrl控件,这个控件需要支持图片和URL超链接功能。

查看了Codeguru和codeproject网站中文章的描述,其中实现的主要部分代码如下。

 if (FAILED(CoInitialize(NULL)))
 {
  return ;
 }

 HBITMAP hBitmap =(HBITMAP)LoadImage
   (NULL, str, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

CImageDataObject::InsertBitmap(m_GameIntroduce.GetIRichEditOle(), hBitmap);

 

 CoUninitialize();

 

CImageDataObject类 我的资源中RichEditCtrl添加图片中可以下到。

 

让RichEditCtrl支持超链接,可以使用下面的代码。也可以使用CRichEditCtrl中的成员函数来实现。主要代码如下。

 //使得richedit支持超链接
 DWORD Mask = m_GameIntroduce.GetEventMask();
 Mask = Mask | ENM_LINK  | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS | ENM_KEYEVENTS;
 m_GameIntroduce.SetEventMask(Mask);
 ::SendMessage(m_GameIntroduce.m_hWnd, EM_AUTOURLDETECT, true, 0);

 

在消息映射中加入

ON_NOTIFY(EN_LINK,IDC_GAME_INTRODUCE,OnRichEditLink)

 

 

超链接实现代码

OnRichEditLink(NMHDR* in_pNotifyHeader, LRESULT* out_pResult )
{
 ENLINK* l_pENLink = ( ENLINK* )in_pNotifyHeader ;
 *out_pResult = 0 ;
 switch( l_pENLink->msg )
 {
 default:{}
   break ;

 case WM_LBUTTONDOWN://如果鼠标左键被点击
  {
   CString strURL ;
   CHARRANGE crCharRange ;
   CRichEditCtrl  * pTempEdit;
   pTempEdit = (CRichEditCtrl *)CRichEditCtrl ::FromHandle(l_pENLink->nmhdr.hwndFrom);
   pTempEdit->GetSel( crCharRange ) ;//得到原来选中的字符
   pTempEdit->SetSel( l_pENLink->chrg ) ;//设置RUL被选中

   strURL = pTempEdit->GetSelText() ;//得到URL
   pTempEdit->SetSel( crCharRange ) ;//恢复原来被选中的字符
   CWaitCursor l_WaitCursor ;
   //用当前默认的浏览器打URL
   ShellExecute( this->GetSafeHwnd(), _T( "open" ),strURL, NULL, NULL, SW_SHOWNORMAL ) ;
   *out_pResult = 1 ;
  }
  break ;

 case WM_LBUTTONUP:
  {
   *out_pResult = 1 ;
  }
  break ;
 }

}

你可能感兴趣的:(浏览器,image,null,url,工具)