2015-01-03 4 views
1

После обнаружения полей LVITEM для 64 бит в этом question, есть одна последняя вещь, которую я не знаю. documentation говорит, что:Являются ли полями LVITEM командами puColumns и piColFmt или целыми числами?

  1. puColumns UINT. Это указатель на массив индексов столбцов, определяющий, какие столбцы отображаются для этого элемента, и порядок этих столбцов.
  2. piColFmt является int. Это указатель на массив из следующих флагов (один или в сочетании), определяющий формат каждого подэлемента в расширенном виде.

Мой вопрос, почему они целые, а не указатели? И в 64-битной архитектуре, должны ли они принимать 8 байтов, таких как указатели или 4 байта, такие как целые числа?

Спасибо!

+1

Как отмечалось в предыдущей вопрос, то Windows SDK является последней инстанцией для деклараций, как это. LVITEM объявлен в include/commctrl.h. Статья MSDN багги, puColumns - это фактически PUINT, а piColFmt - int *. Оба являются, таким образом, указателями. –

+0

Я думал, что они одинаковые. Благодаря! –

ответ

0

Так 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;