Style3D属性面板的开发指南

  1. 类结构简介数据结构

我已经封装成了框架式程序,有固定可靠的数据流程,开发者只需完成简单的几个框架属性的编写,便可轻松完成子对话框选项卡的设计,无需手动管理物体列表的变化或者选项卡的切换。能够按照普通对话框同样任意添加各类控件,数据交换也是经过基类中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 CDialog,public MeshPropertyBase//重要!必定要CDialog在前面,不然会找不到m_hWnd的位置,使得后面窗口的句柄都为null

属性面板类spa

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,假设你的类名字为MeshPropertyTextureSetcode

MeshPropertyTextureSet.h文件中添加orm

#include "MeshPropertyBase.h"

将类声明中的基类public CDialog改成 public  MeshPropertySecondBase
开发

MeshPropertyTextureSet.cpp文件中添加
it

#include "ModelView.h"
#include "PatView.h"
#include "PIDoc.h"

将构造函数中的:CDialog(MeshPropertyTextureSet::IDD, pParent)改成:MeshPropertySecondBase(MeshPropertyTextureSet::IDD, pParent)

在构造函数中添加tab选项卡的标题

m_strName = "纹理";

同时将IMPLEMENT_DYNAMIC(MeshPropertyTextureSet, CDialog)改成IMPLEMENT_DYNAMIC(MeshPropertyTextureSet, MeshPropertySecondBase)

BEGIN_MESSAGE_MAP(MeshPropertyTextureSet, CDialog)改成BEGIN_MESSAGE_MAP(MeshPropertyTextureSet, MeshPropertySecondBase)


实现两个虚函数,固然你不须要的话也能够不实现

virtual void GetData();//每次更换物体时添加
virtual void InitData(int m_MeshNum);//每次更新物体列表时,准备内部的数据结构的大小,m_MeshNum是mesh的总数量


在属性面板 MeshPropertyDlg 中的工做以下:

MeshPropertyDlg.h文件中,添加

#include "MeshPropertyTextureSet.h"

再添加子对话框实例

MeshPropertyTextureSet m_MeshPT;

MeshPropertyDlg.cpp文件中,构造函数中将子对话框指针添加到指针集合,这是为了后台程序的自动调用

m_MeshDlgs.push_back(&m_MeshPT);
//若是是Mesh物体的选项卡
m_SceneDlgs.push_back(&m_SceneS);
//若是是Scene物体的选项卡
相关文章
相关标签/搜索