3,245
社区成员
发帖
与我相关
我的任务
分享
IOleInPlaceFrame* pOleInPlaceFrame=NULL;
IOleInPlaceUIWindow* pOleInPlaceUIwindow=NULL;
IOleInPlaceSite* pOleInPlaceSite=NULL;
OLEINPLACEFRAMEINFO oleInPlaceFrameInfo;
HRESULT hr;
oleInPlaceFrameInfo.cb=sizeof(oleInPlaceFrameInfo);
hr = m_pClientSite->QueryInterface(IID_IOleInPlaceSite, (LPVOID *) &pOleInPlaceSite);
if (hr != S_OK) {
return S_OK;
}
RECT rc1,rc2;
hr=pOleInPlaceSite->GetWindowContext(&pOleInPlaceFrame,&pOleInPlaceUIwindow,&rc1,&rc2,&oleInPlaceFrameInfo);
IOleInPlaceSite *pOleInPlaceSite = NULL;
if (NOERROR == m_pClientSite >QueryInterface(IID_IOleInPlaceSite,
(LPVOID *)&pOleInPlaceSite))
{
pOleInPlaceSite->GetWindow((HWND *)&m_hWndParent);
pOleInPlaceSite->Release();
}
void EnumRichEditObjects()
{
IRichEditOle* lpRichEditOle = NULL;
::SendMessage(m_RichCtrl.m_hWnd, EM_GETOLEINTERFACE, 0, (LPARAM)&lpRichEditOle);
if (lpRichEditOle != NULL)
{
HRESULT hr = 0;
int objectCount = lpRichEditOle->GetObjectCount();
for (int i = 0; i < objectCount; i++)
{
REOBJECT reObj;
ZeroMemory(&reObj, sizeof(REOBJECT));
reObj.cbStruct = sizeof(REOBJECT);
hr = lpRichEditOle->GetObject(i, &reObj, REO_GETOBJ_ALL_INTERFACES);
if(SUCCEEDED(hr))
{
if (reObj.dwUser == 1)
{
LRESULT lRet = ::SendMessage(m_RichCtrl.m_hWnd, EM_POSFROMCHAR, (WPARAM)reObj.cp, NULL);
POINT point = {LOWORD(lRet), HIWORD(lRet)};
RECT rcOle = {point.x, point.y, point.x + reObj.sizel.cx, point.y + reObj.sizel.cy};
}
lpRichEditOle->Release();
}
}
}
}
上面代码是遍历得到控件的位置的代码,或许你有用