本人利用OCC基于MFC多文档的框架,想要实现模型视角的自由切换。首先我的思路是利用MFC框架的工具栏,添加新的Botton按钮,然后在Botton按钮上绘制每个视角对应的位图,作为切换视角的标识,最后对每个Botton按钮添加事件响应。
一、在工具栏添加按钮
首先打开程序的资源视图:打开Toolbar下的IDR_MAINFRAME_256,
第一次打开,这里会有许多默认的按钮,像新建、打开、保存、剪切、复制、粘贴、打印等等。
我们可以把不需要的按钮删除:选中拖拽出去即可。
如果想要添加新的按钮,点击最后一项的空白按钮处进行绘制我们需要的位图即可,绘制位图时可借助工具栏,切换画笔颜色可选择最右侧颜色属性。
!!!! 注意:每次绘制一个按钮,都要修改一个合理的按钮ID名,方便我们后面使用。!!!
二、工具栏添加的按钮和菜单栏里的视图进行关联
首先打开资源视图下的Menu下的IDR_MAINFRAME,选择视图下的工具栏和停靠窗口这一项,添加与刚才工具栏新按钮对应的菜单项,使菜单项的ID和工具栏中按钮的ID保持一致。这里我在工具栏中添加了八个新按钮,所以这里对应添加八个菜单项。
3、添加对应的事件响应
首先打开类视图中的主框架CMainFrame,右击属性添加按钮事件:
点击加号 添加Command事件 (add),对应的八个都进行添加;
添加完成之后:头文件中多了八个函数
public:
afx_msg void OnButtonWire();
afx_msg void OnButtonShape();
afx_msg void OnButtonUp();
afx_msg void OnButtonBottom();
afx_msg void OnButtonLeft();
afx_msg void OnButtonRight();
afx_msg void OnButtonFront();
afx_msg void OnButtonBack();
源文件中:
ON_COMMAND(ID_BUTTON_WIRE, &CMainFrame::OnButtonWire)
ON_COMMAND(ID_BUTTON_SHAPE, &CMainFrame::OnButtonShape)
ON_COMMAND(ID_BUTTON_UP, &CMainFrame::OnButtonUp)
ON_COMMAND(ID_BUTTON_BOTTOM, &CMainFrame::OnButtonBottom)
ON_COMMAND(ID_BUTTON_LEFT, &CMainFrame::OnButtonLeft)
ON_COMMAND(ID_BUTTON_RIGHT, &CMainFrame::OnButtonRight)
ON_COMMAND(ID_BUTTON_FRONT, &CMainFrame::OnButtonFront)
ON_COMMAND(ID_BUTTON_BACK, &CMainFrame::OnButtonBack)
下面实现点击按钮触发事件:
void CMainFrame::OnButtonWire()
{
// TODO: 在此添加命令处理程序代码
AfxMessageBox(_T("您按了 ButtonWire 按钮"));
}
void CMainFrame::OnButtonShape()
{
// TODO: 在此添加命令处理程序代码
AfxMessageBox(_T("您按了 ButtonShape 按钮"));
}
void CMainFrame::OnButtonUp()
{
// TODO: 在此添加命令处理程序代码
AfxMessageBox(_T("您按了 ButtonUp 按钮"));
void CMainFrame::OnButtonBottom()
{
// TODO: 在此添加命令处理程序代码
AfxMessageBox(_T("您按了 ButtonBottom 按钮"));
}
void CMainFrame::OnButtonLeft()
{
// TODO: 在此添加命令处理程序代码
AfxMessageBox(_T("您按了 ButtonLeft 按钮"));
}
void CMainFrame::OnButtonRight()
{
// TODO: 在此添加命令处理程序代码
AfxMessageBox(_T("您按了 ButtonRight按钮"));
}
void CMainFrame::OnButtonFront()
{
// TODO: 在此添加命令处理程序代码
AfxMessageBox(_T("您按了 ButtonFront按钮"));
}
void CMainFrame::OnButtonBack()
{
// TODO: 在此添加命令处理程序代码
AfxMessageBox(_T("您按了 ButtonBack按钮"));
}
运行结果》》
1.
2.
后面的按钮也是这个效果,这里就不一一做展示了。
!!!!!!!