如何在Max SDK中将图像绘制到视口

时间:2011-12-28 09:35:32

标签: sdk 3d max 3dsmax

我希望能够在我的3d Max插件中将图像绘制到视口中, GraphicsWindow类具有在视口中绘制3d对象的功能,但这些绘图调用受当前视口和图形渲染限制的限制。 这是不可取的,因为我想绘制的图像应始终绘制,无论3d max是什么图形模式和使用硬件,进一步我只绘制2d图像所以不需要在3d上下文中绘制它。 / p>

我已设法获取视口的HWND,并且max sdk具有该功能 DrawIconButton();

并且我尝试过使用此功能,但它无法正常工作,图像随着用户交互而随机闪烁,但在没有交互性时消失。 我已经实现了这个功能 RedrawViewsCallback函数,但没有记录DrawIconButton()函数,我不确定这是否是实现它的正确方法。

以下是我用来绘制图像的代码:

void Sketch_RedrawViewsCallback::proc (Interface * ip)
{

    Interface10* ip10 = GetCOREInterface10();
    ViewExp* viewExp = ip10->GetActiveViewport();
    ViewExp10* currentViewport;

    if (viewExp != NULL)
    {
        currentViewport = reinterpret_cast<ViewExp10*>(viewExp->Execute(ViewExp::kEXECUTE_GET_VIEWEXP_10));
    } else {
        return;
    }

    GraphicsWindow* gw = currentViewport->getGW();

    HWND ViewportWindow = gw->getHWnd();
    HDC hdc = GetDC(ViewportWindow); 
    HBITMAP bitmapImage = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));
    Rect rbox(IPoint2(0,0),IPoint2(48,48));

    DrawIconButton(hdc, bitmapImage, rbox, rbox, true);

    ReleaseDC(ViewportWindow, hdc);
    ip->ReleaseViewport(currentViewport);

};

2 个答案:

答案 0 :(得分:0)

我找不到直接绘制到view-port窗口的方法,但是我已经通过使用透明无模式对话框解决了这个问题。

答案 1 :(得分:0)

可能是一个完整的重绘将解决问题。 ForceCompleteRedraw