Je suis en train de lire la documentation NOTIFYICONDATA dans MSDN. Il indique que la structure NOTIFYICONDATA a un membre cbSize doit être défini à la taille de la structure, mais la taille de la structure NOTIFYICONDATA a une taille différente dans chaque Shell32.dll, vous devez donc obtenir la version Shell32.dll avant de définir cbSize.À propos de la documentation MSDN sur le membre cbSize de NOTIFYICONDATA
Les citations suivantes de MSDN:
Si elle est une version 5.0 ou ultérieure, initialiser le membre cbSize comme suit.
nid.cbSize = taille de (NOTIFYICONDATA);
La définition de cbSize à cette valeur active toutes les améliorations de la version 5.0 et 6.0. Pour les versions antérieures, la taille de la structure pré-6.0 est donnée par la constante NOTIFYICONDATA_V2_SIZE et la structure pré-5.0 est donnée par la constante NOTIFYICONDATA_V1_SIZE. Initialisez le membre cbSize comme suit. nid.cbSize = NOTIFYICONDATA_V2_SIZE; L'utilisation de cette valeur pour cbSize permettra à votre application d'utiliser NOTIFYICONDATA avec les versions antérieures de Shell32.dll, mais sans les améliorations de la version 6.0.
Je l'ai trouvé un peu de vague, parce que 'sizeof (NOTIFYICONDATA)' a une valeur différente dans Win98 (en utilisant la version 4.x Shell32.dll), Win2K (version 5.0) et Windows XP (version 6.0). Comment pourrait-il 'activer toutes les améliorations de la version 5.0 et 6.0'?
J'ai donc cherché la définition de NOTIFYICONDATA_V1_SIZE (code source comme ci-dessous), je vois:
NOTIFYICONDATA_V1_SIZE est pour Win 2K (ne comprend pas 2K)
NOTIFYICONDATA_V2_SIZE est pour Win XP
NOTIFYICONDATA_V3_SIZE est pour Vista
(pas sûr si je suis à droite)
Il est tout à fait différen t de ce que dit MSDN? et aucun pour Win2K?
Donc, je suis totalement confus en ce moment. Comment est-ce que je devrais placer le membre de cbSize selon la version de Shell32.dll?
//= = = = = = = = ShellAPI.h = = = = = = = =
typedef struct _NOTIFYICONDATAA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
#if (NTDDI_VERSION < NTDDI_WIN2K)
CHAR szTip[64];
#endif
#if (NTDDI_VERSION >= NTDDI_WIN2K)
CHAR szTip[128];
DWORD dwState;
DWORD dwStateMask;
CHAR szInfo[256];
union {
UINT uTimeout;
UINT uVersion; // used with NIM_SETVERSION, values 0, 3 and 4
} DUMMYUNIONNAME;
CHAR szInfoTitle[64];
DWORD dwInfoFlags;
#endif
#if (NTDDI_VERSION >= NTDDI_WINXP)
GUID guidItem;
#endif
#if (NTDDI_VERSION >= NTDDI_VISTA)
HICON hBalloonIcon;
#endif
} NOTIFYICONDATAA, *PNOTIFYICONDATAA;
typedef struct _NOTIFYICONDATAW {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
#if (NTDDI_VERSION < NTDDI_WIN2K)
WCHAR szTip[64];
#endif
#if (NTDDI_VERSION >= NTDDI_WIN2K)
WCHAR szTip[128];
DWORD dwState;
DWORD dwStateMask;
WCHAR szInfo[256];
union {
UINT uTimeout;
UINT uVersion; // used with NIM_SETVERSION, values 0, 3 and 4
} DUMMYUNIONNAME;
WCHAR szInfoTitle[64];
DWORD dwInfoFlags;
#endif
#if (NTDDI_VERSION >= NTDDI_WINXP)
GUID guidItem;
#endif
#if (NTDDI_VERSION >= NTDDI_VISTA)
HICON hBalloonIcon;
#endif
} NOTIFYICONDATAW, *PNOTIFYICONDATAW;
#define NOTIFYICONDATAA_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAA, szTip[64])
#define NOTIFYICONDATAW_V1_SIZE FIELD_OFFSET(NOTIFYICONDATAW, szTip[64])
#ifdef UNICODE
#define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAW_V1_SIZE
#else
#define NOTIFYICONDATA_V1_SIZE NOTIFYICONDATAA_V1_SIZE
#endif
#define NOTIFYICONDATAA_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAA, guidItem)
#define NOTIFYICONDATAW_V2_SIZE FIELD_OFFSET(NOTIFYICONDATAW, guidItem)
#ifdef UNICODE
#define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAW_V2_SIZE
#else
#define NOTIFYICONDATA_V2_SIZE NOTIFYICONDATAA_V2_SIZE
#endif
#define NOTIFYICONDATAA_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAA, hBalloonIcon)
#define NOTIFYICONDATAW_V3_SIZE FIELD_OFFSET(NOTIFYICONDATAW, hBalloonIcon)
#ifdef UNICODE
#define NOTIFYICONDATA_V3_SIZE NOTIFYICONDATAW_V3_SIZE
#else
#define NOTIFYICONDATA_V3_SIZE NOTIFYICONDATAA_V3_SIZE
#endif
(On dirait que le code ne semble pas bon sur le site Web, mais de Shellapi.h, tout de même)
Vous devez mettre en retrait avec quatre espaces le code à afficher correctement, ou sélectionnez le code entier et appuyez sur Ctrl + K. – Ismael