2012-12-26 3 views
0

안녕하세요 저는 Direct2D를 사용하고 있는데 Radial Gradient Brush를 사용하고 있지만 한 곳에서 멈추었습니다.C++ Direct2D 방사형 그라디언트 브러시

내 방사형 그라데이션 브러시 코드

구조체 SampleWindow : 함수 마우스 이동에 DesktopWindow

{ 
    //FOr Radial Gradient Brush 

    ComPtr<ID2D1RadialGradientBrush> radialBrush; 

    void CrateDeviceResources() 
    { 
     D2D1_GRADIENT_STOP stops[] = 
     { 
      {0.0f, COLOR_WHITE}, 
      {1.0f, COLOR_BLUE} 
     }; 

     ComPtr<ID2D1GradientStopCollection> collection; 
     m_target->CreateGradientStopCollection(stops, _countof(stops),collection.ReleaseAndGetAddressOf()); 

     D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES props = {}; 
     m_target->CreateRadialGradientBrush(props,collection.Get(),radialBrush.ReleaseAndGetAddressOf()); 
    } 

    void Draw() 
    { 
     auto size = m_target->GetSize(); 
     radialBrush -> SetCenter(Point2F(size.width/2.0f, size.height/2.0f)); 
     radialBrush -> SetRadiusX(size.width/2.0f); 
     radialBrush -> SetRadiusY(size.height/2.0f); 

     auto rect = RectF(0.0f, 0.0f, size.width, size.height); 
     m_target -> FillRectangle(rect,radialBrush.Get()); 
    } 

    void MouseMoved(int x, int y, WPARAM) 
    { 
     auto centere = radialBrush->GetCenter(); 
     radialBrush->SetGradientOriginOffset(Point2F(x - centere.x, y - centere.y)); 
     Invalidate(); 
    } 
} 

내가이 줄을 사용

auto centere = radialBrush->GetCenter(); 

내 프로그램은 말해 그 나누기

Access violation Exception 
,363,210

DesktopWindow 클래스 코드는 다음과 같습니다 난 내 다른 클래스에서이 기능을 ovverride 수 있도록

BEGIN_MSG_MAP() 
     MESSAGE_HANDLER(WM_PAINT, PaintHandler) 
     MESSAGE_HANDLER(WM_DESTROY, DestroyHandler) 
     MESSAGE_HANDLER(WM_SIZE, SizeHandler) 
     MESSAGE_HANDLER(WM_DISPLAYCHANGE, DisplayChangeHandler) 
     MESSAGE_HANDLER(WM_MOUSEMOVE, MouseMovedHandler) 
    END_MSG_MAP() 

LRESULT MouseMovedHandler(UINT, WPARAM wParam, LPARAM lParam,BOOL &) 
    { 
     MouseMoved(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam),wParam); 
     return 0; 
    } 

    virtual void MouseMoved(int x, int y, WPARAM) 
    { 

    } 

내가의 mouseMoved 함수가 가상합니다. 나는 내가 어디에서 잘못하고 있는지 이해할 수 없다. 나는 내 코드에서 어디서 수정해야하는지 정정한다.

답변

0

이 질문의 대답은 렌더 타겟 이제 코드가 잘 실행이 실패 사용이 방법

LRESULT MouseMovedHandler(UINT, WPARAM wParam, LPARAM lParam,BOOL &) 
    { 
     if (m_target) 
     { 
      MouseMoved(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam),wParam); 
     } 
     return 0; 
    } 

을 방지하기 때문에 초기화되기 전에 마우스 이동 기능을 제공한다는 것입니다

관련 문제