我希望能够在我的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);
};
答案 0 :(得分:0)
我找不到直接绘制到view-port窗口的方法,但是我已经通过使用透明无模式对话框解决了这个问题。
答案 1 :(得分:0)
可能是一个完整的重绘将解决问题。 ForceCompleteRedraw