属性表的学习

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

 一个属性表包含的一个或多个层叠的窗口叫做页(pages),各自包含着一组相关属性的设置窗口。例如,一个页可以包含设置项目(item)

字体的类型风格,大小,颜色等属性的控制。每页有一个标签(tab),用户可以使用它选择页,使用它移到属性表中的最显著的位置。

 

一个属性表和页实际上包含在对话框中。属性表是一个系统定义的对话框,它管理页及为它们提供一个公共容器。属性表对话框可以是模式的或

非模式的。它包括一 个框架,一个标题栏和四个按钮:确定(OK),取消(Cancel),应用(Apply Now)和帮助(Help)。(帮助(Help)

按钮可能是被隐藏着的,象上面的图解)当用户单击了按钮时,对话框过程为页接收通知消息。

 

在CPropertySheet中有一个PROPSHEETHEADER的结构体m_psh,PROPSHEETHEADER保存了属性表的信息,如:标题,风格等等。

还有个变量CPtrArray m_pages;保存属性页的指针

CPropertySheet有两个很重要的函数:

1.void AddPage(CPropertyPage* pPage)

它的主要的作用:首先把指针加入m_pages,然后检测m_hWnd是否为空,如果不是,经过一系列的内部处理,最后调用CreateProperySheetPage

创建属性叶。

2.void BulidPropPageArray()

它的处理的过程:删除属性页数组并赋予空。然后创建新的属性页数组ppsp,大小从m_pages得知.

然后复制个m_psh的成员ppsh:m_psh.ppsh=ppsh.然后把每个属性页的m_psp(CPropertyPage中的成员)

赋给m_psh.ppsh[i].最后调用:m_psh.nPages=m_pages.GetSize();

 

属性表有两个方式,一是向导方式,一是正常方式。

在向导方式中:一、每一页有三种按钮,“上一步”,“下一步”,“取消”

在属性页有相应的处理函数,这三个按钮是属性表,怎会是在属性页调用呢?

其实首先相应按钮消息是属性表,然后属性表想当前的属性页发送一个WM_NOTIFY的消息,在这消息处理中得到处理。

BOOL CPropertyPage::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
    ASSERT(pResult != NULL);
    NMHDR* pNMHDR = (NMHDR*)lParam;
    if (CDialog::OnNotify(wParam, lParam, pResult))
        return TRUE;

    if (pNMHDR->hwndFrom != m_hWnd && pNMHDR->hwndFrom != ::GetParent(m_hWnd))
        return FALSE;


    switch (pNMHDR->code)
    {
    case PSN_SETACTIVE:
        {
            CPropertySheet* pSheet = DYNAMIC_DOWNCAST(CPropertySheet, GetParent());
            if (pSheet != NULL && !(pSheet->m_nFlags & WF_CONTINUEMODAL) && !(pSheet->m_bModeless))
                *pResult = -1;
            else
                *pResult = OnSetActive() ? 0 : -1;
        }
        break;
    case PSN_KILLACTIVE:
        *pResult = !OnKillActive();
        break;
    case PSN_APPLY:
        *pResult = OnApply() ? PSNRET_NOERROR : PSNRET_INVALID_NOCHANGEPAGE;
        break;
    case PSN_RESET:
        OnReset();
        break;
    case PSN_QUERYCANCEL:
        *pResult = !OnQueryCancel();
        break;
    case PSN_WIZNEXT:
        // Win32 will send a PSN_WIZBACK even if the button is disabled.
        if (IsButtonEnabled(ID_WIZNEXT))
            *pResult = MapWizardResult(OnWizardNext());
        break;
    case PSN_WIZBACK:
        // Win32 will send a PSN_WIZBACK even if the button is disabled.
        if (IsButtonEnabled(ID_WIZBACK))
            *pResult = MapWizardResult(OnWizardBack());
        break;
    case PSN_WIZFINISH:
        *pResult = reinterpret_cast<LRESULT>(OnWizardFinishEx());       
        break;
    case PSN_HELP:
        SendMessage(WM_COMMAND, ID_HELP);
        break;
    default:
        return FALSE;   // not handled
    }

    return TRUE;    // handled
}

 

在一般模式中,选择各个页时,不是触发属性表的WM_COMMAND消息,而是属性页的WM_NOTITY.

从BOOL CPropertyPage::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)中

可以看出相应的消息如:OnApply,OnOk等等都是框架负责调用的,属性表响应。

 

在处理按钮”应用“时,有两个方式:

1.在属性表中处理,按钮是属性表的子控件,怎么响应是很简单,在响应函数中向需要数据的类发送自定义消息

在后每个属性页都要调用SetModified(false);

2.在属性页里重载OnApply函数。只需要一个属性页重载OnApply函数(第一页中),因为默认是第一页,但可以通过SetActivePage

来改变默认活动页。

ArcGIS学习(二)属性表的基本操作 ArcGIS是处理空间数据的平台。对于空间数据,大家可以理解成它是由两个部分构成:1.一个是空间形体,也就是点、线、面三种。线又可以分为直线、曲线,面又分为圆形、正方形、不规则形体等;2.另外一个部分是空间形体所附带的属性,比如一个城市区域(对应到空间形体就是一个面)的属性,包括人口、GDP、企业数等。空间形体+属性构成了空间数据。属性的相关操作主要在属性表中进行!属性表的样子及功能和Excel表比较相似,可以理解为ArcGIS中的Excel表。 阅读详情

相关推荐

Qt学习属性表控件QtTreePropertyBrowser

第一步

qq_37240404的博客 798

PropertySheet

在IDE中依次选择“File”→“New”菜单命令,或直接按快捷键“Ctrl+N”,打开“New”对话框。 在“New”对话框中单击“Projects”选项卡,在列表框中选择“MFC AppWizard(.exe)”项,在“Project name”文本框中输入“dialog_5”,其他使用默认值,单击“OK”按钮,弹出“MFC AppWizard-Step1”对话框。 在“MFC AppWizard-Step1”对话框中,选中“Multiple Document”单选按钮,其他使用默认值,然后单击“Finish”按钮,在弹出的“New Project Information”对话框中单击“OK”按钮,就可以完成工程的创建。

GIS学习笔记(三):GIS属性表基础操作

整型、浮点型、双精度、文本、日期从-2^31 (-2,147.483,648) 到2^31 - 1 (2,147,483,647)的整型数据(所有数字)。存储大小为4个字节从-2^63 (-9223372036854775808)到2^63-1 (9223372036854775807)的整型数据(所有数字)。存储大小为8个字节占4字节( 32位)内存空间,其数值范围为3.4E-38 (是3.4乘以10的-38次方) ~3.4E+38。

weixin_66627002的博客 2805

基于对话框的(PropertySheet)属性表单实现代码

一次给别人做课件。突发狂想用VC来做。效果还不错。也知道怎么实现基于对话框的属性表单了。

PropertySheet最简化例子

一、PropertySheet说明 1.PropertySheet是对话框而非控件,虽然微软将他放在控件文章中来说明。但实际上PropertySheet是一个对话框容器,而非控件的容器。原因是其内部的Page页面,都是标准的对话框。所以应该将它划分为通用对话框一边。 2. PropertySheet的两种典型的使用方式是:Wizard和Tab标签页。一种方式是Wizard式的向导式对话

zzidea的专栏 2063

C++基于MFC的定制PropertySheet属性页的实现

当属性页的子页比较多时,子页的标签显示起来就不太方便,分行显示时使用起来不太舒服。所以本文讨论的就是关于属性页定制的话题,以解决多个子页时的标签显示问题。

dvlinker的技术专栏 4248

CPropertySheet使用示例

在MSDN中详细介绍了CPropertySheet、CPropertyPage的使用方法,这里概要介绍主要步骤,是为笔记。

A Flying Bird 6524

property sheet

6.6  属性页对话框<br />属性页对话框将多个对话框集中起来,通过标签或按钮 来激活各个页面。主要分为一般属性页对话框和向导对话框两类。在一般属性页对话框中,页面的切换通过单击不同的标签实现,在向导对话框中,页面的选择是通 过点击“上一页”、“下一页”、“完成”和“取消”等按钮实现的。<br />与属性页对话框相关的类主要包括 CPropertySheet类和CPropertyPage类。一个属性页可以包含一个CPropertySheet类(或者其派生类)的对象和多个 CPropertyPag

reallaoyao的专栏 5263

ArcGIS学习03:属性表操作

本文介绍ArcGIS中属性表相关知识及常见操作。

apple_52179359的博客 9126

ArcGIS学习记录—属性表的编辑与修改

原文地址: ArcGIS问题:属性表的编辑与修改 - Silent Dawn的日志 - 网易博客 http://gisman.blog.163.com/blog/static/34493388200942785434949/ 属性表的编辑 1. 属性表的编辑与修改 属性表的ID的添加和删除须在stop editing 状态下,在修改或添加具体属性时要在start ...

weixin_30432007的博客 7302

Qt学习笔记(四)属性表

Qt中并没有属性表组件这一模块,只能通过运用其他人封装好的。 下面为下载链接,只需要往工程中添加所有的文件,即可使用 https://gitee.com/ggggy/qt-ShuXingBiao.git 下面为常见的用法: 在Qt Create中将widget组件提升为QtTreePropertyBrowser即可使用 或者 QtTreePropertyBrowser *widget

蹦蹦蹦的博客 2271

基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表

前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库)、Caffe(深度学习库)、Dlib(机器学习库)、libfacedetection(人脸检测库)、cudnn(gpu加速库)。 用到了一个开源的深度学习模型:VGG model。 最终的效果是很赞的,识别一张人脸的速度是0.039秒,而且最重要的是:精度高啊!!! CPU:intel i5-4590 G...

ChenJoya的博客 3万+

uilib 学习属性表

for_casech的博客 683

【jvm学习14】字节码结构(方法表,附加属性表

文章目录12 方法个数13 方法集合13.1 分析第一个方法1 方法访问标志2 方法名索引 & 描述符索引3 属性计数器4 属性集合4.1 属性名称索引4.2 属性长度4.3 属性信息13.2 分析第二个方法13.3 分析第三个方法13.4 分析第四个方法 12 方法个数 13 方法集合 13.1 分析第一个方法 字段表下面就是方发表 类型 名称 含义 数量 u2 acc...

你今天真好看呀 812

ArcEngine10.2设计与开发课程学习(作业三)——基本应用程序生成,右击菜单实现:显示、移除和属性表打开功能

目录 前言——作业说明 一、准备工作 二、代码 1,鼠标移动在地图上时,显示相关信息 2,鼠标移动至工具条工具时,显示工具信息 3,右击菜单的实现, 4,图层移除功能实现 5,属性表功能实现, 前言——作业说明 课程数据见作业二,首先说明一下第一个作业,这是第二个的链接:https://pan.baidu.com/s/1NziPHoMEJx0vc8DCNrX-dA提...

m0_37768631的博客 6658

Arcgis实例操作学习32--融合覆盖线数据的面数据、融合相邻面要素、合并属性表

1、如何快速地融合线数据所覆盖的面数据? 1)选择线要素所覆盖的所有面要素。 打开【菜单栏】|【选择】|【按位置选择】工具,选择方法设置为“从以下图层中选择要素”,目标图层设置为“regions”,源图层设置为“road”,空间选择方法设置为“目标图层要素与源图层要素相交”,应用搜索距离设置为“200”;确定,得到覆盖的面要素。注:本例中数据未设置空间坐标系,故搜索距离使用了相对距离值200,实际应用请考虑具体应用条件。 得到覆盖的面要素: 2)合并面要素。 保持选中状态,选择【编辑器】工具条中的【开

y_j_6666的博客 4063

gis属性表怎么导成excel_gis、mike学习

自己制作一条河流,赋值,模拟河流流动;gis制图:1、将gis页面缩放到合适的比例;2、编辑器-开始编辑(在创建要素中选择线)-直线段(或断面弧段);3、编辑器-构造点(每1m一个断面);4、给构造点增加高程值:用excel为每个构造点赋值,赋值后将excel中的数据导入gis;5、将excel中的数据导入gis:提取所绘制图形点的xy值:系统工具箱-数据管理工具-要素-添加xy坐标-输入要素(点...

weixin_34693167的博客 1479

ESP32学习笔记(31)——BLE带有属性表的GATT服务

一、简介 1.1 通用属性协议(GATT) GATT是用Attribute Protocal(属性协议)定义的一个service(服务)框架。这个框架定义了Services以及它们的Characteristics的格式和规程。规程就是定义了包括发现、读、写、通知、指示以及配置广播的characteristics。 为实现配置文件(Profile)的设备定义了两种角色:Client(客户端)、Server(服务器)。esp32的ble一般就处于Server模式。 一旦两个设备建立了连接,GATT就开始发挥效用

Leung的博客 6906

arcgis批量向属性表中填入信息

方法:通过相同的字段,进行属性表的关联,实现向属性表中批量填入信息。 工作中,有时需要将计算的结果填入属性表中,一般数据量比较大,这时,可通过关联属性表进行批量向属性表中添加 ...

S09M03J的博客 1万+
上一篇: 关于WM_NOTIFY及反射机制的来龙去脉
下一篇: CTreeCtrl的使用(一)
FlowShell
博客等级 码龄17年 119粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值