博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Style3D属性面板的开发指南
阅读量:7208 次
发布时间:2019-06-29

本文共 2328 字,大约阅读时间需要 7 分钟。

  hot3.png

  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

属性面板类

class MeshPropertyDlg : public CDialogBar,public MeshPropertyBase{    ......    public:    	vector
 m_MeshDlgs;//mesh物体选项卡指针集合 vector
 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,假设你的类名字为MeshPropertyTextureSet

MeshPropertyTextureSet.h文件中添加

#include "MeshPropertyBase.h"

将类声明中的基类public CDialog改为 public  MeshPropertySecondBase

MeshPropertyTextureSet.cpp文件中添加

#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物体的选项卡

转载于:https://my.oschina.net/syhgzz/blog/293299

你可能感兴趣的文章
Sr Software Engineer - Big Data Team
查看>>
IntelliJ IDEA给Serializable类加上自动的serialVersionUID
查看>>
[C# 网络编程系列]专题四:自定义Web浏览器
查看>>
2013流行Python项目汇总
查看>>
TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载...
查看>>
关于 Jason.NET 的质问
查看>>
《算法帝国》
查看>>
CSS three column layout
查看>>
一起谈.NET技术,编写T4模板无法避免的两个话题:"Assembly Locking"&"Debug"...
查看>>
金山毒霸专业版高调上线 宣称杀毒速度增3倍
查看>>
一周最新示例代码回顾 (4/2–4/8)
查看>>
PS教程:如何批量处理图片
查看>>
我的INI 配置文件读写动态库
查看>>
交换机命令行配置与VLAN
查看>>
Delphi查询Sqlserver数据库传入日期类型方法总结
查看>>
Windows8(2012) 如何改变登录界面上难看的头像,任意换!
查看>>
Angularjs $http.post
查看>>
HTML:调用静态页面html 的几种方法
查看>>
iptables 开启3306端口
查看>>
服务器硬件测试选型
查看>>