ocx的重绘问题 本帖最后由 zhuyuge0 于 2012-12-27 15:56:18 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 潜入到ie里时,要分清是在ocx中操作的还是在ie里 这个不用重绘的,clistctrl本身就有选中的功能,我只要不把对话框切入到网页,一切运行就全都ok。,只是在ie里面出现了这个问题 这个还用得着说,ocx中我用c++写,ie中我得用html或者javascript,这个有点扯远啦,不过还是多谢回帖帮忙 重载CXXXCtrl的OnSetObjectRects方法.void MyGetClippingCoordinates(LPCRECT pPosRect, LPCRECT pClipRect, LPRECT pIntersectRect, LPPOINT pOffsetPoint){ int clipLeft = 0; int clipTop = 0; if ((pClipRect == NULL) || IsRectEmpty(pClipRect)) { CopyRect(pIntersectRect, pPosRect); } else { IntersectRect(pIntersectRect, pPosRect, pClipRect); clipLeft = pClipRect->left; clipTop = pClipRect->top; } pOffsetPoint->x = 0; pOffsetPoint->y = 0;}BOOL CwebvideoCtrl::OnSetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect){ ASSERT(lprcPosRect != NULL); // Remember the position rectangle for later m_rcPos = *lprcPosRect; // Calculate complete rectangle including the tracker (if present) CRect rectPos = m_rcPos; if (m_bUIActive && m_pRectTracker != NULL) { // Save new clipping rectangle (for DestroyTracker) if (lprcClipRect != NULL) m_pRectTracker->m_rectClip = *lprcClipRect; // Adjust tracker rectangle to new dimensions CRect rectTmp = rectPos; rectTmp.OffsetRect(-rectTmp.left, -rectTmp.top); m_pRectTracker->m_rect = rectTmp; // Adjust the "true" rectangle to include handles/hatching UINT nHandleSize = m_pRectTracker->m_nHandleSize - 1; rectPos.InflateRect(nHandleSize, nHandleSize); } // Now clip that rectangle as appropriate CRect rectClip; // CHANGE - call your own copy of _GetClippingCoordinates MyGetClippingCoordinates(rectPos, lprcClipRect, rectClip, &m_ptOffset); // Move outer window first. then inner window if (!m_bInPlaceSiteWndless) { CWnd* pWndOuter = GetOuterWindow(); //BEGIN CHANGE if (pWndOuter != NULL) { // ::MoveWindow(pWndOuter->m_hWnd, rectClip.left, rectClip.top, // rectClip.Width(), rectClip.Height(), TRUE); ::MoveWindow(pWndOuter->m_hWnd, rectPos.left, rectPos.top, rectPos.Width(), rectPos.Height(), TRUE); } //END CHANGE if (pWndOuter != this) MoveWindow(m_ptOffset.x, m_ptOffset.y, rectPos.Width(), rectPos.Height()); } return TRUE;} 我看了下自己的ocx,直接把OnDraw都注释掉了,没有重载这个函数,一切正常. 开源c++ builde--山寨个c++ builde项目 Unicode 显示下标问题 一个小问题。C# 调用 vc的Dll 请指点迷津,VC学到什么程度,才能出去找工作呢?? 散分。再也不学计算机了 请问怎样将一个对话框整合到View里去? 我把截图的图片保存为BITMAP 4 位色出错? 求救: ODBC中DFX_Text 能交换的字符串的最大长度为255B, 大于此的要用DFX_Text_Bulk? 谁有用纯c写的定时器代码???? 返回的png句柄可以加载到cdc里???? 修改窗体风格,去掉WS_EX_TOOLWINDOW,任务栏上图标不能立即显示的问题
LPRECT pIntersectRect, LPPOINT pOffsetPoint)
{
int clipLeft = 0;
int clipTop = 0; if ((pClipRect == NULL) || IsRectEmpty(pClipRect))
{
CopyRect(pIntersectRect, pPosRect);
}
else
{
IntersectRect(pIntersectRect, pPosRect, pClipRect);
clipLeft = pClipRect->left;
clipTop = pClipRect->top;
} pOffsetPoint->x = 0;
pOffsetPoint->y = 0;
}BOOL CwebvideoCtrl::OnSetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect)
{
ASSERT(lprcPosRect != NULL); // Remember the position rectangle for later
m_rcPos = *lprcPosRect; // Calculate complete rectangle including the tracker (if present)
CRect rectPos = m_rcPos;
if (m_bUIActive && m_pRectTracker != NULL)
{
// Save new clipping rectangle (for DestroyTracker)
if (lprcClipRect != NULL)
m_pRectTracker->m_rectClip = *lprcClipRect; // Adjust tracker rectangle to new dimensions
CRect rectTmp = rectPos;
rectTmp.OffsetRect(-rectTmp.left, -rectTmp.top);
m_pRectTracker->m_rect = rectTmp; // Adjust the "true" rectangle to include handles/hatching
UINT nHandleSize = m_pRectTracker->m_nHandleSize - 1;
rectPos.InflateRect(nHandleSize, nHandleSize);
} // Now clip that rectangle as appropriate
CRect rectClip; // CHANGE - call your own copy of _GetClippingCoordinates
MyGetClippingCoordinates(rectPos, lprcClipRect, rectClip, &m_ptOffset); // Move outer window first. then inner window if (!m_bInPlaceSiteWndless)
{
CWnd* pWndOuter = GetOuterWindow(); //BEGIN CHANGE
if (pWndOuter != NULL)
{ // ::MoveWindow(pWndOuter->m_hWnd, rectClip.left, rectClip.top,
// rectClip.Width(), rectClip.Height(), TRUE);
::MoveWindow(pWndOuter->m_hWnd, rectPos.left, rectPos.top,
rectPos.Width(), rectPos.Height(), TRUE);
}
//END CHANGE
if (pWndOuter != this)
MoveWindow(m_ptOffset.x, m_ptOffset.y, rectPos.Width(), rectPos.Height());
} return TRUE;
}