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 함수가 가상합니다. 나는 내가 어디에서 잘못하고 있는지 이해할 수 없다. 나는 내 코드에서 어디서 수정해야하는지 정정한다.