void Sprite::Invalidate() { // 0指针访问 不挂是因为x64系统一个bug 记得打开调试中的Win32异常断点 HostWindow *wnd = GetHostWindow(); if (wnd) { RECT rc; Gdiplus::RectF rf = GetAbsRect(); rc.left = (LONG)(rf.GetLeft() - 0.5f); rc.top = (LONG)(rf.GetTop() - 0.5f); // TODO FIXME 这个值是试出来的 不知其所以然 rc.right = (LONG)(rf.GetRight() + 1.5f); // 缩小窗口TabCtrl会有拖影 这里改成2 就可以消除拖影现象 rc.bottom = (LONG)(rf.GetBottom() + 1.5f); // 很诡异 可能是因为GdiPlus认为x取大的 width也取大的 ::InvalidateRect(wnd->GetHWND(), &rc, TRUE); } }
void VGraphicPath::_ComputeBounds() { if (fComputeBoundsAccurate) { if (fPathMin == GP_BOUNDS_MIN_DEFAULT || fPathMax == GP_BOUNDS_MAX_DEFAULT) fBounds = VRect(0,0,0,0); else fBounds.SetCoords( (GReal)fPathMin.x, (GReal)fPathMin.y, (GReal)(fPathMax.x-fPathMin.x), (GReal)(fPathMax.y-fPathMin.y)); } else { #if ENABLE_D2D if (fPathD2D != NULL) { if (fGeomSink == NULL) { D2D1_RECT_F bounds; fPathD2D->GetBounds( NULL, &bounds); fBounds.SetCoords( bounds.left, bounds.top, bounds.right-bounds.left, bounds.bottom-bounds.top); return; } } #endif #if !GRAPHIC_MIXED_GDIPLUS_D2D if (!VWinD2DGraphicContext::IsAvailable()) { #endif Gdiplus::RectF bounds; fPath->GetBounds( &bounds); fBounds = VRect ( bounds.GetLeft(), bounds.GetTop(), bounds.GetRight()-bounds.GetLeft(), bounds.GetBottom()-bounds.GetTop()); #if !GRAPHIC_MIXED_GDIPLUS_D2D } #endif } }
void CPHTMLIFrameElement::PlaceControls(HWND hWndParent, CHTMFlowBlockContext* /*pC*/) { ASSERT(0); #if 0 CLHTMLIFrameElement* pElement = static_cast<CLHTMLIFrameElement*>(m_pNode); if (m_pBox) { Gdiplus::RectF rcf = m_pBox->GetAbsInnerRect(); CRect rc((int)rcf.X, (int)rcf.Y, (int)rcf.GetRight(), (int)rcf.GetBottom()); if (pElement->m_pFrameContent == NULL) { CComObject<CLHTMLFrameContent>::CreateInstance(&pElement->m_pFrameContent); pElement->m_pFrameContent->AddRef(); // TODO CPElement* pParent = this; while (pParent) { CComQIPtr<IOleInPlaceFrame> frame = static_cast<ILViewNode*>(pParent); if (frame) { pElement->m_pFrameContent->m_pInPlaceFrame = frame; break; } pParent = pParent->m_parent; } pElement->m_pFrameContent->m_hWnd = hWndParent; pElement->Load(); } if (pElement->m_pFrameContent) { if (pElement->m_pFrameContent->m_spOleObject) { if (pElement->m_pFrameContent->m_pViewSite == NULL) { #if 0 pElement->m_pFrameContent->m_spOleObject->DoVerb(OLEIVERB_SHOW, NULL, pElement->m_pFrameContent, 0, hWndParent, &rc); #endif } else { pElement->m_pFrameContent->m_pViewSite->SetRect(rc); } } } } if (pElement->m_pFrameContent) { if (pElement->m_pFrameContent->m_pViewSite) { ASSERT(pElement->m_pFrameContent->m_pViewSite->m_pIOleDocView); BOOL bShow = m_pBox != NULL; pElement->m_pFrameContent->m_pViewSite->m_pIOleDocView->Show(bShow); } } #endif }