第三章  非几何属性用户输入界面

非几何属性用户输入界面都采用非模态对话框的形式同用户交互,其中大部分是下拉框的形式让用户选择墙体、门窗套间等属性的设定,少数采用文本框的形式让用户输入数据。AutoCAD中的对话框在用户输入之后都试图返回绘图编辑状态,用非模态对话框都要自定义一个消息函数afx_msg LONG onAcadKeepFocus(UINT, LONG),程序中这个消息函数简单的返回true,就能让对话框仍然保持输入焦点,由于每一个界面的类都有这个函数,这里提前对他进行了介绍,后面只列出他的消息响应形式,不再进行说明。由于描述各个对话框的类都是从MFC类库中的对话框类Cdialog类继承而来下面分别对各个用户进行介绍。

1、总输入控制界面

他的界面如图1所示,这个界面中用户通过各种功能按钮进入响应的输入界面,各种功能按钮分别为全局参数设置、门窗表的录入、房间墙体属性设置、房间分配、房间控制以及界面返回。在界面中用户按下一个功能按钮之后进入响应的界面,同时总控制界面消失。当其它界面输入完成之后,又返回到总的控制界面。

用于描述控制界面的MFC类为globeSet

class LineDisplayer : public CDialog

{

// Construction

public:

LineDisplayer(CWnd* pParent = NULL);   // 标准构造函数

// Dialog Data

//{{AFX_DATA(LineDisplayer)

enum { IDD = IDD_DISPLAYER };//对话框资源,用户界面资源的编号

//}}AFX_DATA

private:

WinRegister *pWinTable;//进入门窗表录入界面的对象指针

globeSet *pGlobe; //进入全局设定界面的对象指针

winAsign *pwinAsign; //进入门洞设置界面的对象指针

roomAsign *proomAsign; //进入房间分配界面的对象指针

WallConstruction *pWallStruction; //进入墙体结构设置界面的对象指针

ApartControl *pApartControl; //进入房间控制界面的对象指针

int room_index;//get the selroom index

void ListRoom(Room *pR);已废弃

void fill_combox();//已废弃

CODBCDynamic *winExplore;//已废弃

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(LineDisplayer)

protected:

virtual void DoDataExchange(CDataExchange* pDX);    数据和消息交互声名

//}}AFX_VIRTUAL

// Implementation

protected:

// Generated message map functions

//{{AFX_MSG(LineDisplayer)

afx_msg void OnSelRoomChange();已废弃

afx_msg void OnRoomStruct();响应墙体结构设置功能按钮

afx_msg void OnWinTable();响应门窗表录入功能按钮

virtual BOOL OnInitDialog();初始化对话框

afx_msg void OnGlobe();响应全局设置功能按钮

afx_msg void OnWinStruct();响应门窗结构设置功能按钮

afx_msg void OnRoomAsign();响应房间分配功能按钮

afx_msg void OnControl();响应套间控制功能按钮

afx_msg void OnDone();最后完成消息

DECLARE_EVENTSINK_MAP()

//}}AFX_MSG

afx_msg LONG onAcadKeepFocus(UINT, LONG);

DECLARE_MESSAGE_MAP()

};

2、全局设置界面

在这个类中进行建筑属性的全局设置,这些全局设置包括默认的建筑内外墙体结构、建筑地板和天花板的材料结构、建筑层数、每一层中的套间数和建筑层高等特性的全局设置。下面是从对话框类继承来的全局MFC类的描述。

class globeSet : public CDialog

{

public:

globeSet(CWnd* pParent = NULL);   // standard constructor

friend class LineDisplayer;//声名和总输入界面的类是友类

// Dialog Data

//{{AFX_DATA(globeSet)

enum { IDD = IDD_GLOBE };资源标识

CComboBox   m_com_floor;地板下拉框对象

CComboBox   m_com_top;天花板下拉框对象

CComboBox   m_com_out;外墙下拉框对象

CComboBox   m_com_in;内墙下拉框对象

int           m_apart_amount;用于记录套间数量的变量

int           m_floor_amount;用于记录层数的变量

int           m_floor_height;用于记录层高的遍历

//}}AFX_DATA

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(globeSet)

protected:

virtual BOOL Create(LineDisplayer* pParentWnd, UINT nID);非模态对话框的创建函数

virtual void DoDataExchange(CDataExchange* pDX);    // 数据交换

//}}AFX_VIRTUAL

private:

CODBCDynamic *winExplore;//数据库钩子

LineDisplayer *pPlayer;总功能对话框指针,用于返回到总功能界面

// Implementation

protected:

// Generated message map functions

//{{AFX_MSG(globeSet)

virtual BOOL OnInitDialog();初始化,在初始化中应用数据库钩子连接上材料结构数据库,对各种结构选择下拉框进行填充,以便用户选择输入

afx_msg void OnSelchangeFloor();响应地板结构选择输入

afx_msg void OnSelchangeInWall();响应内墙结构选择输入

afx_msg void OnSelchangeOuterWall();响应外墙结构选择输入

afx_msg void OnSelchangeTop();响应天花板结构选择输入

afx_msg void OnChangeApartAmount();响应套间数量文本输入

afx_msg void OnChangeFloorAmount();响应层数文本输入

afx_msg void OnChangeFloorHeight();响应层高文本输入

afx_msg void OnOk();输入完毕

//}}AFX_MSG

afx_msg LONG onAcadKeepFocus(UINT, LONG);

DECLARE_MESSAGE_MAP()保持焦点

};

全局设置输入完毕之后,响应的全局设置保存在下面的全局变量中:

winOrDoor winTable; 门窗表,这个全局变量用于下面门窗表录入记录门窗表

int Floor_Amount;层数

int Floor_Height;层高

int Apartment_Amount;套间数

CString in_construction;内墙结构

CString out_construction;外墙结构

CString floor_construction;地板结构

CString top_construction; 天花板结构

3、门窗表录入

该界面用于录入门窗表,建筑设中门窗规格都是用门窗表的形式进行管理,这个界面中对门窗表进行录入,用于后面对门窗进行设置。下面是MFC的门窗录入类的定义:

class WinRegister : public CDialog

{

// Construction

public:

friend class LineDisplayer;声名友类

WinRegister(CWnd* pParent = NULL);   // standard constructor

// Dialog Data

//{{AFX_DATA(WinRegister)

enum { IDD = IDD_REGISTER };资源标识

CButton   m_winOrDoorCtr;复选按钮对象,用于标识是对门输入还是对窗输入

CListCtrl m_winTable;表格对象,用于显示已输入的数据

CComboBox   m_glass_type;窗户的玻璃类型下拉框对象,显示玻璃让用户选择

CComboBox   m_door_construct;门结构下拉对象,显示门材料

int           m_base_high;窗户的台高记录

int           m_high;门洞高度

CString   m_index;门窗编号

CString   m_glassType;玻璃类型

CString   m_doorConstruct;门的材料

int           m_width;,门洞宽度

int           m_frameWidth;框架厚度

BOOL     m_winOrDoor;布尔变量,用于区别是门还是窗户

//}}AFX_DATA

private:

CODBCDynamic *winExplore;//the datebase explore

LineDisplayer *pPlayer;,总界面指针

CString typeName;类型名称

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(WinRegister)

public:

virtual BOOL Create(LineDisplayer* pParentWnd, UINT nID);创建函数

protected:

virtual void DoDataExchange(CDataExchange* pDX);  数据交互

//}}AFX_VIRTUAL

// Implementation

protected:

// Generated message map functions

//{{AFX_MSG(WinRegister)

afx_msg void OnDelete();响应界面删除已输入门窗数据

afx_msg void OnAdd();响应门窗数据添加按钮

virtual BOOL OnInitDialog();初始化

afx_msg void OnSelchangeWinType();响应玻璃类型选择

afx_msg void OnSelchangeDoorConstruct();响应门结构选择

virtual void OnOK();完成

afx_msg void OnChangeIndex();响应编号文本输入

afx_msg void OnSelWin();输入窗户数据

afx_msg void OnSetfocusWinType();窗户类型获得焦点

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

afx_msg LONG onAcadKeepFocus(UINT, LONG);对话框保持焦点

};

4、墙体结构设置界面

该界面中用户对建筑平面中的每一面墙体结构进行设置,由于在进行全局设置之后,各种内外墙体的材料结构都已经设置成了默认的值,如果用户还要单独对某个墙体材料结构进行设置,在界面中首先选择该墙体所在的房间,选中的房间的各个墙体在AutoCAD中高亮显示,他的各个墙体以及他们的墙体在表格中列出,当用户在表格中选中某个墙体的时候,该墙体高亮显示,同时在表格的该行中出现一个下拉框,让用户进行该墙体材料结构的设置。在这个界面中还对房间的功能性质如是厨房还是卧室进行设置。

下面是墙体结构设置MFC类的定义:

class WallConstruction : public CDialog

{

// Construction

public:

friend class LineDisplayer;声名友类

WallConstruction(CWnd* pParent = NULL);   // standard constructor

LineDisplayer *pPlayer;总功能界面指针

// Dialog Data

//{{AFX_DATA(WallConstruction)

enum { IDD = IDD_WALL_CONSTRUCTION };资源标识

CComboBox   m_roomtype;房间功能

CComboBox   m_com_wall;墙体结构下拉框对象

CComboBox   m_com_room;房间选择下拉框对象

CListCtrl m_wall_list;墙体列表对象

//}}AFX_DATA

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(WallConstruction)

protected:

virtual BOOL Create(LineDisplayer* pParentWnd, UINT nID);创建函数

virtual void DoDataExchange(CDataExchange* pDX);  数据交互t

//}}AFX_VIRTUAL

// Implementation

protected:

// Generated message map functions

//{{AFX_MSG(WallConstruction)

virtual BOOL OnInitDialog();初始化,主要是对各种对象进行初始化

afx_msg void OnOk();完成

afx_msg void OnSelchangeWallStruct();响应墙体材料选择

afx_msg void OnSelchangeRoom();响应房间选择

afx_msg void OnClickWallList(NMHDR* pNMHDR, LRESULT* pResult);响应列表中墙体选择

afx_msg void OnSelchangeConRoomtype();响应房间功能设置

//}}AFX_MSG

afx_msg LONG onAcadKeepFocus(UINT, LONG);保持焦点

DECLARE_MESSAGE_MAP()

private:

CODBCDynamic *winExplore;//the datebase explore数据库钩子

Room *curRoom;//the current sel room当前被选择的房间

Wall *curWall;当前选择的墙体

int selIndex;保留选择房间的编号

void fillList(Room *pR,int &amount);房间链表中的第amount个房间填充墙体列表

int walls,roomNo;//已废弃

};

5、门窗结构设置界面

该界面中用户对每一个门洞进行设置,如果窗户有遮阳板,还要对遮阳板系数进行输入。在这个界面中,首先用户对房间进行选择,如果该房间的墙体上有门洞,门洞在下面的列表中列出,当用户在列表中选择一个门洞的时候,他在AutoCAD中高亮显示,同时在列表相应的第二列中出现门窗表的下拉框,在用户输入的门窗表的编号都在下拉框中列出,让用户进行选择设置。在表中同时还注明该门洞是否有遮阳板,有遮阳板在下面的系数文本框中都显示相应的数据。用户还可以对遮阳板进行设置和输入。

下面是相应的MFC类定义:

class winAsign : public CDialog

{

// Construction

public:

friend class LineDisplayer;声名友类

winAsign(CWnd* pParent = NULL);

// Dialog Data

//{{AFX_DATA(winAsign)

enum { IDD = IDD_WIN_ASIGN };资源标识

CEdit      m_w_edit;遮阳板系数w输入对象

CEdit      m_d_edit; 遮阳板系数d输入对象

CEdit      m_b_edit; 遮阳板系数b输入对象

CEdit      m_a_edit; 遮阳板系数a输入对象

CListCtrl m_win_list;门洞列表对象输入对象

CButton   m_haveOverhang;是否有遮阳板复选对象

CComboBox   m_com_index;门窗表编号下拉框对象

CComboBox   m_com_room;房间下拉框对象

float m_hang_a; 遮阳板系数a

float m_hang_b; 遮阳板系数b

float m_hang_d; 遮阳板系数d

float m_hang_w; 遮阳板系数w

BOOL     m_checkoverhang;布尔变量,识别是否有遮阳板

//}}AFX_DATA

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(winAsign)

protected:

virtual BOOL Create(LineDisplayer* pParentWnd, UINT nID);创建函数

virtual void DoDataExchange(CDataExchange* pDX);   数据交互

//}}AFX_VIRTUAL

// Implementation

protected:

// Generated message map functions

//{{AFX_MSG(winAsign)

virtual BOOL OnInitDialog();初始化

afx_msg void OnOk();完成

afx_msg void OnSelchangeComRoomwin();已废弃

afx_msg void OnSelendcancelComWinindex();响应门窗编号选择

afx_msg void OnClickWinListwin(NMHDR* pNMHDR, LRESULT* pResult);响应门洞表中对门洞的选择

afx_msg void OnChangeHangA();响应遮阳板系数A的输入

afx_msg void OnChangeHangB();响应遮阳板系数B的输入

afx_msg void OnChangeHangD();响应遮阳板系数D的输入

afx_msg void OnChangeHangW();响应遮阳板系数W的输入

afx_msg void OnHaveOverhang();响应是否有遮阳板的设置

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

afx_msg LONG onAcadKeepFocus(UINT, LONG);保留输入焦点

private:

void fillList(int index,Room *pR,int &amount);对门洞表进行填充,把填充的行数保存在amount中

LineDisplayer *pPlayer;总功能界面指针

Room *selRoom;保存选中的房间变量

int winAmount;当前房间的总门洞数

int selIndex;被选择的门洞编号

winOrDoor *curWin;当前选择的门洞

};

6、房间分配界面

房间分配界面用于分配房间到套间中,在该界面中对每一个房间进行分配,在全局设置中已经设置了建筑设计中的每一层中的套间数量,这个界面用于指定每一个房间属于那个套间。在界面中列出了所有房间,当用户进行选择的时候,在相应行出现套间编号的下拉框,用户简单的在下拉列表中进行选择就能完成房间的分配。最后用户还对房间的zone类型进行设置。在介绍zone类型的时候已经交代了,zone类型是应钟琴的要求进行添加的类,他也是用下拉框的形式让用户进行选择,下拉框的内容从数据库获得。下面是相应的MFC类定义:

class roomAsign : public CDialog

{

// Construction

public:

friend class LineDisplayer;声名友类

roomAsign(CWnd* pParent = NULL);   // standard constructor

// Dialog Data

//{{AFX_DATA(roomAsign)

enum { IDD = IDD_ROOM_ASIGN };资源标识

CComboBox   m_com_apart;套间编号下拉框对象

CListCtrl m_room_list;房间列表对象

//}}AFX_DATA

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(roomAsign)

protected:

virtual BOOL Create(LineDisplayer* pParentWnd, UINT nID);创建函数

virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

// Generated message map functions

//{{AFX_MSG(roomAsign)

virtual BOOL OnInitDialog();初始化

afx_msg void OnClickList1(NMHDR* pNMHDR, LRESULT* pResult);响应房间选择

afx_msg void OnOk();完成

afx_msg void OnSelchangeComApartment();响应套间选择

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

afx_msg LONG onAcadKeepFocus(UINT, LONG);保持焦点

private:

LineDisplayer *pPlayer;总功能界面指针

int selIndex;选择的房间编号

Room *selRoom;选择的房间指针

int selApartment;选择的套间编号

};

关于套间控制的类由钟琴编写,本人只提供一个功能按钮

总界面最后是完成按钮,按下这个按钮的时候,程序完成。

arx程序说明(三)相关推荐

  1. SharePoint使用BCS开发你第一个应用程序(三)

    SharePoint使用BCS开发你第一个应用程序(三) 创建外部内容类型. 创建外部内容类型有三种不同方式: 1. 在记事本上手写XML代码(不推荐). 2. 使用SharePoint Design ...

  2. 利用FRIDA攻击Android应用程序(三)

    利用FRIDA攻击Android应用程序(三) 前言 在我的有关frida的第二篇博客发布不久之后,@muellerberndt决定发布另一个OWASP Android crackme,我很想知道是否 ...

  3. java比较三个数的编程_Java小程序输入三个数求最大数

    Java小程序输入三个数求最大数代码: import java.io.*; public class Help { // 比较两个数字 public static void main(String[] ...

  4. 计算机启动应用程序的方法,excel的程序_Excel2010中启动应用程序的三种方法

    使用Excel时,需要先启动应用程序,怎么去进行操作启动它?今天,学习啦小编就教大家在Excel2010中启动应用程序的三种方法. Excel2010中启动应用程序的三种步骤如下: 1.开始菜单 在桌 ...

  5. python语言控制结构是指_python程序的三种控制结构

    程序的三种控制结构 什么是控制结构? """ 程序有三种基本结构组成:顺序结构.分支结构.循环结构.任何程序都是由这三种基本结构组成. 顺序结构是程序按照线性顺序依次执行 ...

  6. 执行 Python 程序的三种方式及Python 的 IDE —— `PyCharm`

    执行 Python 程序的三种方式 3.1. 解释器 python / python3 Python 的解释器 # 使用 python 2.x 解释器 $ python xxx.py# 使用 pyth ...

  7. 【项目】ARX程序开发:框裁直线(Rect Trim Line)功能开发

    这个项目快要结题了,至今为止在文昌和张老师提出的数个需求中也只是完成了裁剪标注这一个功能,确实有点少.跟张老师谈过了,他说让我再多做一两个,然后在做个工具条和菜单栏来整合.趁着现在毕业设计有阶段性的成 ...

  8. Java版 设计一个程序, 输入三位数a, 分别输出个,十,百位

    1. 设计一个程序, 输入三位数a, 分别输出个,十,百位. (0<a<1000) 样例输入: 251 样例输出: 2 5 1 package package01; import java ...

  9. 潘爱民:计算机程序的演进——我的程序人生三十年

    本文为<新程序员004>内容,与潘爱民畅谈他的程序人生.<新程序员004>即将上市,敬请期待.从MySQL之父.MariaDB创始人Michael "Monty&qu ...

最新文章

  1. 如何在Node.js中退出
  2. python中三级菜单讲解_Python字典实现简单的三级菜单(实例讲解)
  3. 李洋疯狂C语言之break和continue的区别
  4. linux shell脚本 main,Linux shell启动Java Main函数脚本
  5. 地图转换|用arcgis 将cad转kmz
  6. 【信息学奥赛一本通】网址链接
  7. wordpress比其它phpcms有什么优势,看完就知道了
  8. TMS320F28377D的外设应用笔记(1)——Epwm配置
  9. 在github上建立自己的网站
  10. HDU——2154——跳舞毯
  11. 大连理工计算机博士,【看完窒息】大连理工大学博士遗书
  12. 操作系统复习——进程同步与通信
  13. Photoshop CS2 视频教程-PS制作霓虹灯效果(转)
  14. 2225. 找出输掉零场或一场比赛的玩家
  15. 【Spark】Spark基础教程
  16. RxJava 过滤操作符(Filtering Observables Operators)
  17. 【云原生 | 13】手把手教你搭建ferry开源工单系统
  18. 盘点好莱坞电影对人工智能的那些错误理解!
  19. Linux文件系统(四)文件缓存
  20. 腾讯云Android 人脸识别,快速接入代码

热门文章

  1. instagram发布工具_如何将全景图发布到Instagram
  2. 幼儿计算机试题及答案,幼儿园老师计算机操作试题
  3. 博图只能通过地址相同设备找到plc_【新手】西门子博图基本操作
  4. js中构造函数的创建
  5. CentOS7防火墙相关操作
  6. 创造最大效率,团队成员的重要性【成长】【体会】
  7. 其实很寂寞,只是不想说:伤感QQ空间日志
  8. 【Excel】日期时间转任意时区
  9. html java编辑器插件,5+用Java编写的最佳代码编辑器插件
  10. 二维数据输入到matlab cnn网络训练