类结构简介
我已经封装成了框架式程序,有固定可靠的数据流程,开发者只需完成简单的几个框架属性的编写,即可轻松完成子对话框选项卡的设计,无需手动管理物体列表的变化或者选项卡的切换。可以按照普通对话框一样任意添加各种控件,数据交换也是通过基类中Frame,Doc,三个View的指针即可实现,无需手动赋值。
两个基类:
class MeshPropertyBase { CPiFrame* m_pPiFrame; CModelView* m_pModelView; CPatView* m_pPatView; CLayoutView* m_pLayoutView; CPiDoc* m_pPiDoc; //这些指针可以供使用者调用程序中的数据,但是在构造函数中是不确定的,在OnInitDialog()第一步就是确定这些值 int meshid;//选中Mesh的ID String m_strName;//tab上的标题 virtual void GetData();//每次更换物体时调用 virtual void InitData(int m_MeshNum);//每次更新物体列表时调用,准备内部的数据结构的大小 virtual void UpdateViews();//调用各种view的render() UINT m_nIDTemplate;//记住自己的窗口ID模板 } class MeshPropertySecondBase:public MeshPropertyBase,public CDialog
属性面板类
class MeshPropertyDlg : public CDialogBar,public MeshPropertyBase { ...... public: vector<MeshPropertySecondBase*> m_MeshDlgs;//mesh物体选项卡指针集合 vector<MeshPropertySecondBase*> m_SceneDlgs; //需要添加有关自己对话框代码 MeshPropertyMaterialSet m_MeshPM; MeshPropertyTextureSet m_MeshPT; MeshPropertyLightSet m_SceneL; MeshPropertyShaderSet m_SceneS;//这是四个子对话框类的实例 ...... }
子对话框类例子:
class MeshPropertyTextureSet : public MeshPropertySecondBase
2.如何编写子对话框
添加mfc类,选择CDialog作为基类,这样就添加一个对话框。宽122*266高,属性中,border 为 none,style 为 child,必须设置为child
.h文件中添加
#include "MeshPropertyBase.h"
.cpp文件中添加
#include "ModelView.h" #include "PatView.h" #include "PIDoc.h"
将基类CDialog改为 MeshPropertySecondBase
将构造函数中的:CDialog(MeshPropertyTextureSet::IDD, pParent)改为MeshPropertySecondBase(MeshPropertyTextureSet::IDD, pParent)
在构造函数中添加tab选项卡的标题
m_strName = "纹理";
实现两个虚函数,当然你不需要的话也可以不实现
virtual void GetData();//每次更换物体时添加 virtual void InitData(int m_MeshNum);//每次更新物体列表时,准备内部的数据结构的大小,m_MeshNum是mesh的总数量
在属性面板 MeshPropertyDlg 中的工作如下:
.h文件类声明中添加子对话框实例
MeshPropertyTextureSet m_MeshPT;
.cpp文件中,构造函数中将子对话框指针添加到指针集合,这是为了后台程序的自动调用
m_MeshDlgs.push_back(&m_MeshPT); //如果是Mesh物体的选项卡 m_SceneDlgs.push_back(&m_SceneS); //如果是Scene物体的选项卡
Style3D属性面板的开发指南,布布扣,bubuko.com
原文地址:http://my.oschina.net/syhgzz/blog/293299