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物體的選項卡
相關文章
相關標籤/搜索