[英]C++ Direct2D Radial Gradient Brush
您好,我正在使用Direct2D,並且正在使用“徑向漸變畫筆”,但是我被卡在一個地方。
我的徑向漸變筆刷代碼
struct 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
DesktopWindow類代碼為:
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函數設為虛擬,以便可以在其他類中使用該函數。 我無法理解我在哪里做錯了,請更正我應該在我的代碼中進行更正的地方。
這個問題的答案是鼠標移動功能在初始化渲染目標之前出現,為避免此失敗,請使用此方法
LRESULT MouseMovedHandler(UINT, WPARAM wParam, LPARAM lParam,BOOL &)
{
if (m_target)
{
MouseMoved(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam),wParam);
}
return 0;
}
現在代碼可以正常運行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.