这两种不同的添加方法——结果有何不同?

本文详细解析了FlexGrid配置中的枚举类型及其作用,包括拖放操作、数据粘贴效果、错误代码、外观设置等关键特性。

如下为第一种:

这种方式添加成员变量以后,并会添加flexgrid相关的类。

如下为第二种:


这种方式添加以后,也会添加FlexGrid相关的类。

 

上述两种结果有何不同?


结论 :

按照添加成员变量的方式时 头文件中多了

enum
{
    flexOLEDragManual = 0,
    flexOLEDragAutomatic = 1
}OLEDragConstants;
enum
{
    flexOLEDropNone = 0,
    flexOLEDropManual = 1
}OLEDropConstants;
enum
{
    flexEnter = 0,
    flexLeave = 1,
    flexOver = 2
}DragOverConstants;
enum
{
    flexCFText = 1,
    flexCFBitmap = 2,
    flexCFMetafile = 3,
    flexCFDIB = 8,
    flexCFPalette = 9,
    flexCFEMetafile = 14,
    flexCFFiles = 15,
    flexCFRTF = -16639
}ClipBoardConstants;
enum
{
    flexOLEDropEffectNone = 0,
    flexOLEDropEffectCopy = 1,
    flexOLEDropEffectMove = 2,
    flexOLEDropEffectScroll = -2147483648
}OLEDropEffectConstants;
enum
{
    flexerrIllegaFunctionCall = 5,
    flexerrObjIllegalUse = 425,
    flexerrClipInvalidFormat = 461,
    flexerrDataObjectLocked = 672,
    flexerrExpectedAnArgument = 673,
    flexerrRecursiveOLEDrag = 674,
    flexerrUserFormatNotBinArray = 675,
    flexerrDataNotSetForFormat = 676,
    flexerrUnknownError = 600,
    flexerrSubscript = 381,
    flexerrBadValue = 380,
    flexerrGetNotSupported = 394,
    flexerrSetNotPermitted = 387,
    flexerrOutOfMemory = 7,
    flexerrVB30000 = 30000,
    flexerrVB30001 = 30001,
    flexerrVB30002 = 30002,
    flexerrVB30004 = 30004,
    flexerrVB30005 = 30005,
    flexerrVB30006 = 30006,
    flexerrVB30008 = 30008,
    flexerrVB30009 = 30009,
    flexerrVB30010 = 30010,
    flexerrVB30011 = 30011,
    flexerrVB30013 = 30013,
    flexerrVB30014 = 30014,
    flexerrVB30015 = 30015,
    flexerrVB30016 = 30016,
    flexerrVB30017 = 30017
}ErrorConstants;
enum
{
    flexFlat = 0,
    flex3D = 1
}AppearanceSettings;
enum
{
    flexBorderNone = 0,
    flexBorderSingle = 1
}BorderStyleSettings;
enum
{
    flexFocusNone = 0,
    flexFocusLight = 1,
    flexFocusHeavy = 2
}FocusRectSettings;
enum
{
    flexHighlightNever = 0,
    flexHighlightAlways = 1,
    flexHighlightWithFocus = 2
}HighLightSettings;
enum
{
    flexScrollBarNone = 0,
    flexScrollBarHorizontal = 1,
    flexScrollBarVertical = 2,
    flexScrollBarBoth = 3
}ScrollBarsSettings;
enum
{
    flexTextFlat = 0,
    flexTextRaised = 1,
    flexTextInset = 2,
    flexTextRaisedLight = 3,
    flexTextInsetLight = 4
}TextStyleSettings;
enum
{
    flexFillSingle = 0,
    flexFillRepeat = 1
}FillStyleSettings;
enum
{
    flexGridNone = 0,
    flexGridFlat = 1,
    flexGridInset = 2,
    flexGridRaised = 3
}GridLineSettings;
enum
{
    flexSelectionFree = 0,
    flexSelectionByRow = 1,
    flexSelectionByColumn = 2
}SelectionModeSettings;
enum
{
    flexMergeNever = 0,
    flexMergeFree = 1,
    flexMergeRestrictRows = 2,
    flexMergeRestrictColumns = 3,
    flexMergeRestrictAll = 4
}MergeCellsSettings;
enum
{
    flexPictureColor = 0,
    flexPictureMonochrome = 1
}PictureTypeSettings;
enum
{
    flexResizeNone = 0,
    flexResizeColumns = 1,
    flexResizeRows = 2,
    flexResizeBoth = 3
}AllowUserResizeSettings;
enum
{
    flexDefault = 0,
    flexArrow = 1,
    flexCross = 2,
    flexIBeam = 3,
    flexIcon = 4,
    flexSize = 5,
    flexSizeNESW = 6,
    flexSizeNS = 7,
    flexSizeNWSE = 8,
    flexSizeEW = 9,
    flexUpArrow = 10,
    flexHourglass = 11,
    flexNoDrop = 12,
    flexArrowHourGlass = 13,
    flexArrowQuestion = 14,
    flexSizeAll = 15,
    flexCustom = 99
}MousePointerSettings;
enum
{
    flexSortNone = 0,
    flexSortGenericAscending = 1,
    flexSortGenericDescending = 2,
    flexSortNumericAscending = 3,
    flexSortNumericDescending = 4,
    flexSortStringNoCaseAscending = 5,
    flexSortStringNoCaseDescending = 6,
    flexSortStringAscending = 7,
    flexSortStringDescending = 8
}SortSettings;
enum
{
    flexAlignLeftTop = 0,
    flexAlignLeftCenter = 1,
    flexAlignLeftBottom = 2,
    flexAlignCenterTop = 3,
    flexAlignCenterCenter = 4,
    flexAlignCenterBottom = 5,
    flexAlignRightTop = 6,
    flexAlignRightCenter = 7,
    flexAlignRightBottom = 8,
    flexAlignGeneral = 9
}AlignmentSettings;

其他地方 包括 cpp文件都完全一样 。

AWS SigV4(Signature Version 4)是 AWS 用于验证请求合法性的签名机制,广泛用于调用 AWS 服务 API(如 S3、API Gateway、ES/OpenSearch 等)。它支持两种主要的身份验证方式: 1. **使用授权头(Authorization Header)** 2. **使用查询参数(Signed Query String / Pre-signed URL)** 虽然两者都基于相同的 SigV4 算法,但在使用场景、安全性、灵活性等方面有显著区别。 --- ## ✅ 1. 使用授权头(Authorization Header) ### 🔧 工作原理 客户端在 HTTP 请求头中添加 `Authorization` 字段,包含完整的签名信息。签名由以下部分组成: ``` Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20240415/us-east-1/service/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=b97d918c... ``` ### 📌 示例代码(Python + requests) ```python import boto3 from botocore.auth import SigV4Auth from botocore.awsrequest import AWSRequest from botocore.credentials import Credentials import requests # 准备请求 method = 'GET' url = 'https://execute-api.us-east-1.amazonaws.com/prod/hello' headers = { 'Host': 'execute-api.us-east-1.amazonaws.com', 'x-amz-date': '20240415T000000Z' } # 创建 AWS 凭证对象 creds = Credentials(access_key='YOUR_ACCESS_KEY', secret_key='YOUR_SECRET_KEY') # 构造请求对象并签名 request = AWSRequest(method=method, url=url, headers=headers) SigV4Auth(creds, 'execute-api', 'us-east-1').add_auth(request) # 发送请求 prepared = request.prepare() response = requests.request(method, prepared.url, headers=prepared.headers) print(response.text) ``` ### ✅ 特点 | 项目 | 描述 | |------|------| | 安全性 | 高 —— 密钥不暴露在 URL 中 | | 适用场景 | 内部系统、后端服务、不可分享的 API 调用 | | 是否可缓存 | 否(每个请求需独立签名) | | 可读性 | 对用户透明,适合程序调用 | | 过期控制 | 不支持自动过期(除非配合临时凭证) | > ⚠️ 缺点:不能用于浏览器直接访问或 CDN 分发。 --- ## ✅ 2. 使用查询参数(Pre-signed URL) ### 🔧 工作原理 将签名信息编码进 URL 的查询参数中,主要是: - `X-Amz-Signature`: 实际签名 - `X-Amz-Credential`: 凭证标识 - `X-Amz-Date`: 时间戳 - `X-Amz-Expires`: 过期时间(秒) - `X-Amz-Algorithm`: 固定为 `AWS4-HMAC-SHA256` - `X-Amz-SignedHeaders`: 签名时包含的 header 列表 ### 📌 示例代码(生成预签名 URL) ```python import boto3 from botocore.config import Config client = boto3.client( 's3', region_name='us-east-1', config=Config(signature_version='s3v4') ) url = client.generate_presigned_url( 'get_object', Params={'Bucket': 'my-bucket', 'Key': 'data.pdf'}, ExpiresIn=3600 # 1小时后过期 ) print(url) # 输出示例: # https://my-bucket.s3.amazonaws.com/data.pdf? # X-Amz-Algorithm=AWS4-HMAC-SHA256 # &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20240415%2Fus-east-1%2Fs3%2Faws4_request # &X-Amz-Date=20240415T000000Z # &X-Amz-Expires=3600 # &X-Amz-SignedHeaders=host # &X-Amz-Signature=aee2... ``` ### ✅ 特点 | 项目 | 描述 | |------|------| | 安全性 | 中 —— URL 可被日志记录、分享、泄露;建议设置短有效期 | | 适用场景 | 文件下载/上传链接、前端直传、临时共享资源 | | 是否可缓存 | 是(但有过期时间限制) | | 可读性 | 差 —— URL 很长且复杂 | | 过期控制 | 支持!通过 `ExpiresIn` 控制有效时间 | > ✅ 优点:无需客户端拥有 AWS 凭证,可用于浏览器、移动端等非可信环境。 --- ## 🆚 主要区别对比表 | 对比项 | 授权头(Authorization Header) | 查询参数(Pre-signed URL) | |--------|-------------------------------|-----------------------------| | 签名位置 | HTTP 头部 | URL 查询参数 | | 安全性 | 更高(密钥不出现在 URL) | 较低(URL 可能被记录、转发) | | 是否需要长期凭证 | 是(客户端必须有 AK/SK) | 否(由服务端生成即可) | | 是否支持过期 | 否(除非用临时凭证) | 是(明确设置 `ExpiresIn`) | | 使用场景 | 后端服务间通信、CLI 工具 | 前端下载、临时访问、CDN 加速 | | 可分享性 | 不可分享 | 可分享(但应谨慎) | | 实现难度 | 中等(需手动构造签名流程) | 简单(SDK 提供 `generate_presigned_url`) | | 典型服务 | API Gateway、OpenSearch、EC2 | S3、CloudFront(RTMP)、Lambda(HTTP) | --- ## 💡 如选择? | 场景 | 推荐方式 | |------|----------| | 后端服务调用 AWS API | ✅ 授权头 | | 前端需要下载私有 S3 文件 | ✅ 预签名 URL | | 移动 App 访问受保护资源 | ✅ 预签名 URL(由后端签发) | | CLI 或脚本操作 AWS 资源 | ✅ 授权头 | | 分享一个临时链接给别人 | ✅ 预签名 URL(设置 15 分钟有效期) | ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值