当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: 又不想把按钮搞的好大好大,不好看 应该有可以单独设置按钮上字体的地方吧? ......
 ·asp.net用什么编译器    »显示摘要«
    摘要: 如题。 ......


要将一个ActiveX控件插入CRichEditCtrl中应该做些什么工作

如题

NO.1   作者: realmiss

把ActivX控件做为CRichEditCtrl的子窗口试试

NO.2   作者: jiangsheng

用IOleObject::SetClientSite,OleSetContainedObject和IRichEditOle::InsertObjec  
  理论上来说还要inplace   activate的,但是我的控件是windowless的,所以没写。  
   
  void CRichEditGifDlg::InsertGIF(LPCTSTR   lpszText)  
  {  
  CString   strText(lpszText);  
  CString   strFile;  
  if(!m_mapTextToFile.Lookup(strText,strFile))  
  {  
  strFile=strText;  
  m_mapTextToFile.SetAt(strText,strFile);  
  }  
  LPRICHEDITOLE lpRichEditOle=NULL;  
  LPOLEOBJECT lpObject=NULL;  
  LPSTORAGE               lpStorage=NULL;  
  LPOLECLIENTSITE lpClientSite=NULL;  
  LPLOCKBYTES lpLockBytes   =   NULL;  
  REOBJECT   reobject;  
  ZeroMemory(&reobject,   sizeof(REOBJECT));  
  reobject.cbStruct   =   sizeof(REOBJECT);  
  HRESULT   hr=S_OK;  
  CLSID   clsid=CLSID_NULL;  
  do{  
  lpRichEditOle=m_wndRichEdit.GetIRichEditOle();  
  if(lpRichEditOle==NULL)break;  
  hr=   ::CreateILockBytesOnHGlobal(NULL,   TRUE,   &lpLockBytes);  
  if   (hr   !=   S_OK||lpLockBytes==NULL) break;  
  hr=   ::StgCreateDocfileOnILockBytes(lpLockBytes,  
  STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE,   0,   &lpStorage);  
  if   (hr!=   S_OK||lpStorage==NULL) break;  
  hr=lpRichEditOle->GetClientSite(&lpClientSite);  
  if   (hr!=   S_OK||lpClientSite==NULL) break;  
  try  
  {  
  ANIMATEPICLib::_DAnimatePicPtr ptrAnimatePic;  
  hr   =   ptrAnimatePic.CreateInstance(_T("ANIMATEPIC.AnimatePicCtrl.1"));  
  if(   FAILED(hr)   ) _com_issue_error(hr);  
  hr   =   ptrAnimatePic.QueryInterface(IID_IOleObject,   (void**)&lpObject);  
  if(   FAILED(hr)||lpObject==NULL) _com_issue_error(hr);  
  lpObject->SetClientSite(lpClientSite);  
  hr=OleSetContainedObject(lpObject,   TRUE);  
  if(   FAILED(hr)   ) _com_issue_error(hr);  
   
  _bstr_t   bstrPath((LPCTSTR)strFile);  
  hr   =   ptrAnimatePic->Load(bstrPath);  
  ptrAnimatePic->PutText((LPCTSTR)strText);  
  if(   FAILED(hr)   ) _com_issue_error(hr);  
   
  hr=lpObject->GetUserClassID(&clsid);  
  if(   FAILED(hr)   ) _com_issue_error(hr);  
  reobject.clsid   =   clsid;  
  reobject.cp   =   REO_CP_SELECTION;  
  reobject.dvaspect   =   DVASPECT_CONTENT;  
  reobject.dwFlags   =   REO_BELOWBASELINE;  
  reobject.dwUser   =   0;  
  reobject.poleobj   =   lpObject;  
  reobject.polesite   =   lpClientSite;  
  reobject.pstg   =   lpStorage;  
  SIZEL   sizel={0,0};  
  reobject.sizel   =   sizel;  
  hr=lpRichEditOle->InsertObject(&reobject);  
  }  
  catch(   _com_error   e   )  
  {  
  LPCTSTR   lpszErrMessage=e.ErrorMessage();  
  }  
   
  }while(FALSE);  
  if(lpObject)  
  lpObject->Release();  
  if(lpLockBytes)  
  lpLockBytes->Release();  
  if(lpClientSite)  
  lpClientSite->Release();  
  if(lpRichEditOle)  
  lpRichEditOle->Release();  
  }  
 

NO.3   作者: boyplayee

UP

NO.4   作者: vcleaner

参考例子:  
  http://www.codeproject.com/richedit/COleRichEditCtrl.asp

NO.5   作者: wenkui

不需要写任何东西  
  vc下建个ocx   选默认的选项  
  编译   把它放在一个dialog上   加变量   会生成一个类基于Cwnd的  
  将该类引入工程   在需要的地方   声明变量  
  然后象窗口一样create就行了。

NO.6   作者: qrlvls

up,被抢先了  
  关键在于   IRichEditOleCallback


    摘要: 连续3天看了3个感情帖子,都看到这个帐号回贴,热心啊!(其中有个帖子就是找深圳男朋友的),就冲这个,帖子我开了。。 来接分 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE