-----------------------------------------------
                      FORMATETC STRUCTURE AND CLIPFORMAT
                                January 2024
                 -----------------------------------------------
                                    CCB



1. THE FORMATETC STRUCTURE:

     typedef struct tagFORMATETC {
       CLIPFORMAT     cfFormat;
       DVTARGETDEVICE *ptd;
       DWORD          dwAspect;
       LONG           lindex;
       DWORD          tymed;
     } FORMATETC, *LPFORMATETC;


2. REFERENCE CODE:

     I have found some code such as:
     ; cfFormat = di
     mov  word ptr [ ebp - 60 ] , di

     So CLIPFORMAT is a WORD, it is not a DWORD, in 16-bit Windows and 32-bit Windows (x86) and 64-bit Windows (x64).

     The 32-bit FORMATETC structure:
     typedef struct tagFORMATETC {
       WORD           cfFormat; // 0x00
       WORD           padding1; // 0x02
       DVTARGETDEVICE *ptd;     // 0x04
       DWORD          dwAspect; // 0x08
       LONG           lindex;   // 0x0C
       DWORD          tymed;    // 0x10
     } FORMATETC, *LPFORMATETC;
     The size of 32-bit FORMATETC structure data is 0x14 bytes.

     The 64-bit FORMATETC structure:
     typedef struct tagFORMATETC {
       WORD           cfFormat; // 0x00
       WORD           padding1; // 0x02
       DWORD          padding2; // 0x04
       DVTARGETDEVICE *ptd;     // 0x08
       DWORD          dwAspect; // 0x10
       LONG           lindex;   // 0x14
       DWORD          tymed;    // 0x18
     } FORMATETC, *LPFORMATETC;
     The size of 64-bit FORMATETC structure data is 0x1C bytes.


3. REFERENCE WEBSITES:

     1, Why is CLIPFORMAT defined to be a WORD rather than a UINT?
     http://blogs.msdn.com/b/oldnewthing/archive/2011/11/28/10241836.aspx


4. OTHER:

     For reference only, there is no guarantees.

     Any questions or suggestions, please send me an email at ccb2000@163.com.