ActiveX/잔상처리

.NET Framework 도구2 DAYS IN PARIS21세기 모노리스ACLActiveX ActiveX/잔상처리

ActiveX 사용시 IE에서 스크롤 하게되면
잔상이 생길때가있습니다.



VC++ 에서 만든 MFC ActiveX 가 그런거 같더군여.. 비베로 만든 ActiveX 는 안그런걸로 알고 있습니다..
암튼.. 해결 방법은
일일히 해당 컨트롤들을 Invalidate 해주는 방법이 있는데 이것도 깔끔하게는 안되더군여..
그래서 정법을 소개합니다.. 이걸로 하니 깔끔하게 잘되더군여..
 
///// 1.. 먼| ~@  ~W~M~T~L~L~]~W~P..

public:
virtual BOOL OnSetObjectRects(LPCRECT lpRectPos, LPCRECT lpRectClip);   //~X~D~]~]~S~\

private:
void    MyGetClippingCoordinates(LPCRECT pPosRect, LPCRECT pClipRect,
                      LPRECT pIntersectRect, LPPOINT pOffsetPoint);

////2. CPP ~L~L~]~W~P...
 
void CxxxCtrl::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 = min(0, pPosRect->left - clipLeft);
    pOffsetPoint->y = min(0, pPosRect->top - clipTop);
}

BOOL CxxxCtrl::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, rectPos.left, rectPos.top,
                    rectPos.Width(), rectPos.Height(), TRUE);
        }
        //END CHANGE                                
        if (pWndOuter != this)
            MoveWindow(0, 0, rectPos.Width(), rectPos.Height());
    }
    return TRUE;
}

ID
Password
Join





- 전 이런 놈입니다.

격언> 자신을 믿으면 삿된 마음이 사라지고, 남을 믿으면 사랑하는 마음이 일어난다. (증엄)

Recent Changes

D  Echoes Of War(The... @ 2012-05-18 [03:44 pm] by windlesszone
D  Diablo3 @ 2012-05-15 [04:49 pm] by windlesszone
D  Diablo3/story/wizard @ 2012-05-15 [04:48 pm] by windlesszone 4 changes
D  Diablo3/story/wit... @ 2012-05-15 [04:16 pm] by windlesszone
D  Diablo3/story/monk @ 2012-05-15 [04:14 pm] by windlesszone





Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-04-03 13:06:48
Processing time 0.1089 sec