LVITEM 字段 puColumns 和 piColFmt 是指针还是整数?
Are LVITEM fields puColumns and piColFmt pointers or integers?
在这个 , there is one last thing I don't know. The documentation 中发现 64 位 LVITEM 的字段后说:
- puColumns 是一个 UINT。它是一个指向列索引数组的指针,指定为此项显示哪些列,以及这些列的顺序。
- piColFmt 是一个整数。它是指向以下标志(单独或组合)的数组的指针,指定扩展平铺视图中每个子项的格式。
我的问题是为什么它们是整数而不是指针?在 64 位架构中,它们应该像指针一样占用 8 个字节,还是像整数一样占用 4 个字节?
谢谢!
所以 Windows SDK 说:
typedef struct tagLVITEMA
{
UINT mask;
int iItem;
int iSubItem;
UINT state;
UINT stateMask;
LPSTR pszText;
int cchTextMax;
int iImage;
LPARAM lParam;
#if (_WIN32_IE >= 0x0300)
int iIndent;
#endif
#if (_WIN32_WINNT >= 0x0501)
int iGroupId;
UINT cColumns; // tile view columns
PUINT puColumns;
#endif
#if _WIN32_WINNT >= 0x0600 // Will be unused downlevel, but sizeof(LVITEMA) must be equal to sizeof(LVITEMW)
int* piColFmt;
int iGroup; // readonly. only valid for owner data.
#endif
} LVITEMA, *LPLVITEMA;
在这个
- puColumns 是一个 UINT。它是一个指向列索引数组的指针,指定为此项显示哪些列,以及这些列的顺序。
- piColFmt 是一个整数。它是指向以下标志(单独或组合)的数组的指针,指定扩展平铺视图中每个子项的格式。
我的问题是为什么它们是整数而不是指针?在 64 位架构中,它们应该像指针一样占用 8 个字节,还是像整数一样占用 4 个字节?
谢谢!
所以 Windows SDK 说:
typedef struct tagLVITEMA
{
UINT mask;
int iItem;
int iSubItem;
UINT state;
UINT stateMask;
LPSTR pszText;
int cchTextMax;
int iImage;
LPARAM lParam;
#if (_WIN32_IE >= 0x0300)
int iIndent;
#endif
#if (_WIN32_WINNT >= 0x0501)
int iGroupId;
UINT cColumns; // tile view columns
PUINT puColumns;
#endif
#if _WIN32_WINNT >= 0x0600 // Will be unused downlevel, but sizeof(LVITEMA) must be equal to sizeof(LVITEMW)
int* piColFmt;
int iGroup; // readonly. only valid for owner data.
#endif
} LVITEMA, *LPLVITEMA;