我希望能够在我的3DMAX插件中绘制图像到视口中,GraphicsWindow类有在视口中绘制3d对象的函数,但这些绘制调用受到当前视口和图形渲染限制的限制。这是不可取的,因为我想要绘制的图像总是应该被绘制,无论3d max是在什么图形模式下,或者使用硬件,而且我只绘制2d图像,所以没有必要在3d上下文中绘制它。
我已经设法获得了视口的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);
};发布于 2011-12-30 23:29:56
我无法找到直接绘制到视口窗口的方法,但是我已经通过使用透明的无模式对话框解决了这个问题。
发布于 2015-02-24 09:17:17
也许完全重绘就能解决这个问题。ForceCompleteRedraw
https://stackoverflow.com/questions/8654131
复制相似问题