標籤:style color 使用 os 檔案 資料
類結構簡介
我已經封裝成了架構式程式,有固定可靠的資料流程,開發人員只需完成簡單的幾個架構屬性的編寫,即可輕鬆完成子對話方塊選項卡的設計,無需手動管理物體列表的變化或者選項卡的切換。可以按照普通對話方塊一樣任意添加各種控制項,資料交換也是通過基類中Frame,Doc,三個View的指標即可實現,無需手動賦值。
兩個基類:
class MeshPropertyBase{CPiFrame* m_pPiFrame;CModelView* m_pModelView;CPatView* m_pPatView;CLayoutView* m_pLayoutView;CPiDoc* m_pPiDoc;//這些指標可以供使用者調用程式中的資料,但是在建構函式中是不確定的,在OnInitDialog()第一步就是確定這些值int meshid;//選中Mesh的IDString 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物體的選項卡