文档章节

Style3D属性面板的开发指南

周卓
 周卓
发布于 2014/07/21 15:37
字数 689
阅读 98
收藏 0
  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<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,假设你的类名字为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物体的选项卡

© 著作权归作者所有

周卓
粉丝 5
博文 7
码字总数 3519
作品 0
沈阳
私信 提问
Xcode 界面详解

Xcode 界面详解 1. Xcode 界面简介 (1) 顶部区域 程序运行相关 : -- 从左至右介绍 : 运行按钮, 停止按钮, 为工程选择运行平台; 编辑器相关 : -- 从左至右介绍 : 标准编辑器, 辅助编辑器, 版本...

刘波100
2016/08/22
14
0
Start Developing iOS Apps Today系列(十三)

Start Developing iOS Apps Today系列之后续 十三、查找信息 开发应用程序时,您会希望先前了解或不了解的信息都随手可查。其实无需离开 Xcode,您便能获得所需的一切信息。 Xcode附带了大量...

Lambda8421
2015/01/29
0
0
Firebug & Chrome Console 控制台使用指南

Console API 当打开 firebug (也包括 Chrome 等浏览器的自带调试工具),window 下面会注册一个叫做 console 的对象,它提供多种方法向控制台输出信息,供开发人员调试使用。下面是这些方法的...

i33
2012/07/23
0
2
怎样在Ubuntu中修改默认程序

在 Ubuntu 中修改默认程序 作为一个新手,你需要知道如何在 Ubuntu 中修改任何默认程序,这也是我今天在这篇指南中所要讲的。这里提及的方法适用于所有的 Ubuntu 12.04,Ubuntu 14.04 和Ubu...

linuxprobe
2016/09/14
4
0
Web浏览器:Firebug & Chrome Console 控制台使用指南

Console API 当打开 firebug (也包括 Chrome 等浏览器的自带调试工具),window 下面会注册一个叫做 console 的对象,它提供多种方法向控制台输出信息,供开发人员调试使用。下面是这些方法的...

BazingaYou
2013/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

android6.0源码分析之Camera API2.0下的Preview(预览)流程分析

本文将基于android6.0的源码,对Camera API2.0下Camera的preview的流程进行分析。在文章android6.0源码分析之Camera API2.0下的初始化流程分析中,已经对Camera2内置应用的Open即初始化流程进...

天王盖地虎626
6分钟前
0
0
java 序列化和反序列化

1. 概述 序列恢复为Java对象的过程。 对象的序列化主要有两 首先我们介绍下序列化和反序列化的概念: 序列化:把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程。...

edison_kwok
17分钟前
0
0
分布式数据一致性

狼王黄师傅
58分钟前
1
0
经验

相信每位开发者在自己开发的过程中,都会反思一些问题,比如怎样提高编程能力、如何保持心态不砍产品经理、996 之后怎样恢复精力……最近开发者 Tomasz Łakomy 将他 7 年的开发生涯中学习到...

WinkJie
今天
4
0
从源码的角度来看SpringMVC

SpringMVC核心流程图 简单总结 首先请求进入DispatcherServlet 由DispatcherServlet 从HandlerMappings中提取对应的Handler 此时只是获取到了对应的Handle,然后得去寻找对应的适配器,即:H...

骚年锦时
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部