QQ图文发送方式?可否将OCX控件当作OLE对象插入CRichEditCtrl?ADO如何读取XML中的记录集?寻求技术高人请进...................................
不知何时才可解决..............................................
不知何时才可解决..............................................
解决方案 »
- 请教如何在active控件中创建一个edit和button控件?
- 是否可以在richedit 指定区域加背景颜色?
- 如何在多线程中调用COM对象
- 为什么我的VC++使用Visual Assist X后就不能正常运行, 总是cpu100%的占用?
- BLENDFUNCTION结构中有一字段的解释不明!
- 禁止光驱弹出
- ???希望在SDI程序(继承自CEditView)的界面栏上能够显示鼠标所在行列位置
- 挑战Crack高手,ActiveSkin 4.25 Crack?
- MFC扩展DLL中一大段说明是什么意思啊?
- 关于使用 vtoolsd 写 vxd 驱动数据采集卡的看法(使用8253定时启动AD,模数转换完毕发中断)大家看对不对
- 急:如何知道主程序创建的线程是否都执行完毕了
- 请问FREETEXTBOX可否用于MFC WINDOWS编程,还有FCKEditor可以吗?
2.读xml,网上有很多,搜下即可
QQ图文发送方式?是用流的方式吗,动态GIF也可以?????
可否将OCX控件当作OLE对象插入CRichEditCtrl?怎么写.................?
ADO如何读取XML中的记录集,网上很多吗?
#define USERCTRL linectlLib::_Dlinectl* //替换此处
BOOL InsertOleItem(IRichEditOle* lpRichEditOle,const CLSID clsid,const IID iid)
{
USERCTRL lpicontrl = NULL;//控件
IStorage* lpStorage = NULL;//存储接口
IOleObject* lpOleObject = NULL;//OLE对象
LPLOCKBYTES lpLockBytes = NULL;//LOCKBYTE
IOleClientSite* lpOleClientSite = NULL;
//IPolyCtl* lpPolyCtl = NULL;
CLSID clsidobj;
REOBJECT reobject;
HRESULT hr;
if(lpRichEditOle == NULL)
return FALSE;
//创建PolyCtl对象并获取接口
hr = ::CoCreateInstance(clsid,NULL,CLSCTX_INPROC,iid,(LPVOID*)&lpicontrl);
if( lpicontrl == NULL )
{
return FALSE;
}// USES_CONVERSION;
BOOL bRet = TRUE;try{
hr = lpicontrl->QueryInterface(&lpOleObject);//获得数据对象接口
if( hr != S_OK )
AfxThrowOleException(hr);
hr = lpOleObject->GetUserClassID(&clsidobj);
if ( hr != S_OK)
AfxThrowOleException(hr); hr = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);//创建LOCKBYTE对象
if (hr != S_OK)
AfxThrowOleException(hr);
ASSERT(lpLockBytes != NULL); hr = ::StgCreateDocfileOnILockBytes(lpLockBytes,//创建复合文档
STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &lpStorage);
if (hr != S_OK)
{
VERIFY(lpLockBytes->Release() == 0);
lpLockBytes = NULL;
AfxThrowOleException(hr);
} lpRichEditOle->GetClientSite(&lpOleClientSite); ZeroMemory(&reobject, sizeof(REOBJECT));//初始化一个对象
reobject.cbStruct = sizeof(REOBJECT);
reobject.clsid = clsidobj;
reobject.cp = REO_CP_SELECTION;
reobject.dvaspect = DVASPECT_CONTENT;
reobject.dwFlags = REO_BELOWBASELINE;
reobject.poleobj = lpOleObject;
reobject.polesite = lpOleClientSite;
reobject.pstg = lpStorage; hr = lpRichEditOle->InsertObject( &reobject );
if (hr != S_OK)
AfxThrowOleException(hr);
OleSetContainedObject(lpOleObject,TRUE);
//在此处调用函数..............
}catch( COleException* e )
{
TRACE(_T("OleException code:%d"),e->m_sc);
e->Delete();
bRet = FALSE;
}// release the interface
if( lpicontrl != NULL ) lpicontrl->Release();
if( lpOleObject != NULL ) lpOleObject->Release();
if( lpOleClientSite != NULL ) lpOleClientSite->Release();
if( lpStorage != NULL ) lpStorage->Release();return bRet;
}//template<typename t,const IID *_IID> //\\_com_ptr_t< _com_IIID<t,_IID> >
//#improt ".....***.dll" || #improt ".....***.ocx"
#define CTRL_PTR _DlinectlPtr //IGifAnimatorPtr //将此处替换
BOOL InsertOleItem2(IRichEditOle* lpRichEditOle,LPOLESTR progid,HWND hparent)
{
CTRL_PTR m_ctrlptr;//控件
LPLOCKBYTES lpLockBytes = NULL;
SCODE sc;
HRESULT hr;LPOLECLIENTSITE m_lpClientSite;
CLSID clsid;
//ptr 2 storage
LPSTORAGE m_lpStorage;
//the object 2 b insert 2
LPOLEOBJECT m_lpObject;//Create lockbytes
sc = ::CreateILockBytesOnHGlobal(NULL, TRUE, &lpLockBytes);
if (sc != S_OK)
AfxThrowOleException(sc);
ASSERT(lpLockBytes != NULL);//use lockbytes to create storage
sc = ::StgCreateDocfileOnILockBytes(lpLockBytes,
STGM_SHARE_EXCLUSIVE|STGM_CREATE|STGM_READWRITE, 0, &m_lpStorage);
if (sc != S_OK)
{
VERIFY(lpLockBytes->Release() == 0);
lpLockBytes = NULL;
AfxThrowOleException(sc);
}
ASSERT(m_lpStorage != NULL);//get the ClientSite of the very RichEditCtrl
lpRichEditOle->GetClientSite(&m_lpClientSite);
ASSERT(m_lpClientSite != NULL);try
{
//Initlize COM interface
hr = ::CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
if( FAILED(hr) )
_com_issue_error(hr); //here, I used a smart point, so I do not need to free it
//LPOLESTR* pstr;
//::ProgIDFromCLSID(mclsid,pstr);
//::CoCreateInstance()
hr = m_ctrlptr.CreateInstance(progid);//ProgID
if( FAILED(hr) )
_com_issue_error(hr); //get the IOleObject
hr = m_ctrlptr.QueryInterface(IID_IOleObject, (void**)&m_lpObject);
if( FAILED(hr) )
_com_issue_error(hr); //Set it 2 b inserted
OleSetContainedObject(m_lpObject, TRUE);//可有可无?????? sc = m_lpObject->GetUserClassID(&clsid);
if (sc != S_OK)
AfxThrowOleException(sc); //2 insert in 2 richedit, you need a struct of REOBJECT
REOBJECT reobject;
ZeroMemory(&reobject, sizeof(REOBJECT)); reobject.cbStruct = sizeof(REOBJECT);
reobject.clsid = clsid;//设置OLE对像ID
reobject.cp = REO_CP_SELECTION;//能够被选中
reobject.dvaspect = DVASPECT_CONTENT;//嵌入显示
reobject.dwFlags = REO_BELOWBASELINE;//与文字在同一行 | REO_RESIZABLE ;可拉伸
reobject.poleobj = m_lpObject;//OLE实例
reobject.polesite = m_lpClientSite;//位置
reobject.pstg = m_lpStorage;//存储对像
//reobject.dwUser = 0;
//SIZEL sizel;
//sizel.cx = sizel.cy = 0;
//reobject.sizel = sizel;
//HWND hWndRT = this->m_hWnd;
//Sel all text
// ::SendMessage(hWndRT, EM_SETSEL, 0, -1);
// DWORD dwStart, dwEnd;
// ::SendMessage(hWndRT, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
// ::SendMessage(hWndRT, EM_SETSEL, dwEnd+1, dwEnd+1);
//Insert after the line of text
lpRichEditOle->InsertObject(&reobject); //::SendMessage(hWndRT, EM_SCROLLCARET, (WPARAM)0, (LPARAM)0);
//VARIANT_BOOL ret;
//show it note
m_lpObject->DoVerb(OLEIVERB_UIACTIVATE, NULL, m_lpClientSite, 0, hparent, NULL);
m_lpObject->DoVerb(OLEIVERB_SHOW, NULL, m_lpClientSite, 0, hparent, NULL);
//RedrawWindow();
if (m_lpClientSite)
{
m_lpClientSite->Release();
m_lpClientSite = NULL;
}
if (m_lpObject)
{
m_lpObject->Release();
m_lpObject = NULL;
}
if (m_lpStorage)
{
m_lpStorage->Release();
m_lpStorage = NULL;
}
}
catch( _com_error e )
{
AfxMessageBox(e.ErrorMessage());
::CoUninitialize();
}
return TRUE;
}
void Cdlg2Dlg::OnBnClickedInsert()
{
// TODO: 在此添加控件通知处理程序代码
IRichEditOle* lpRichEditOle = m_rc.GetIRichEditOle();
linectlLib::_Dlinectl* mctrl = NULL;//{ocx
//InsertOleItem(lpRichEditOle,CLSID_linectl,DIID__Dlinectl);
//mctrl->Release();
InsertOleItem2(lpRichEditOle,L"LINECTL.linectlCtrl.1",m_rc.m_hWnd);
//ocx}//{dll
//InsertOleItem2(lpRichEditOle,L"ImageOle.GifAnimator.1",m_rc.m_hWnd);
//dll}
}