这篇文章是在我的另一篇文章“继承mfc的cwnd类渲染opengl”的基础上改进的。
AntTweakBar是一个条状的菜单库,类似于内嵌于渲染窗口的属性条,可以和OpenGL渲染窗口融为一体,效果很好看。以前见过有人用这个库,效果比较好看就关注了下。在网上找相关的资料,发现只有人在glut下使用。还有人因为在MFC下使用不成功,认为和MFC不兼容。其实,这个库只要给了渲染引擎就行了,然后把一些事情传给它就能交互了。
AntTweakBar提供的都是简单的C接口,所以非常方便和已有的界面框架整合,无论你用的是OpenGL还是DX渲染,无论你用的界面框架是glut还是glfw或者sdl等等都行。官方网站也提供了整合步骤。
我现在介绍下,在我的框架里面的整合步骤。
第一步,在OnCreate函数里面调用TwInit(TW_OPENGL, NULL);初始化。
第二步,在OnCreate函数里面创建bar并且绑定变量。如,
1 | *myBar; |
第三步,在OnSize里面调用TwWindowSize(cx, cy);
第四步,修改PreTranslateMessage实现为,
1 | if (TwEventWin(pMsg->hwnd, pMsg->message, pMsg->wParam, pMsg->lParam)) |
第五步,在RenderScene函数最后添加TwDraw(),但是得保证在SwapBuffers(m_hDC)之前添加这句。
第六步,在OnDestroy()中调用TwTerminate()释放资源。
综上所述,整合还是非常简单的。
另外,AntTweakBar提供TwDefine函数用于设置颜色,透明度等参数,可以调整效果,非常方便。还有一个需要注意的是,TwAddVarRW绑定的变量不能是局部变量,否则会出错。当你绑定的变量值变化时候,就是你和AntTweakBar交互的时候了。总之,非常方便使用吧。
最后,我要说的是,AntTweakBar自己会使用自身的光标,它的光标会覆盖MFC窗口的光标。如果,我们坚持使用MFC的光标的话,该怎么办了。只能禁止掉AntTweakBar的光标了。方法是,修改它的源码,重新编译成库。我们把TwMgr.cpp的针对windows系统的SetCursor函数内部实现注视掉就行了。如下所示:
1 | void CTwMgr::SetCursor(CTwMgr::CCursor _Cursor) |
以下是实现效果,