類結構簡介數據結構
我已經封裝成了框架式程序,有固定可靠的數據流程,開發者只需完成簡單的幾個框架屬性的編寫,便可輕鬆完成子對話框選項卡的設計,無需手動管理物體列表的變化或者選項卡的切換。能夠按照普通對話框同樣任意添加各類控件,數據交換也是經過基類中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物體的選項卡