MSDN의 NOTIFYICONDATA 설명서를 읽었습니다.MSDN 정보 NOTIFYICONDATA의 cbSize 멤버에 대한 문서
NOTIFYICONDATA 구조체에는 구조체의 크기로 cbSize 멤버를 설정해야하지만 NOTIFYICONDATA 구조체의 크기는 모든 Shell32.dll에서 크기가 다르기 때문에 cbSize를 설정하기 전에 Shell32.dll 버전을 가져와야합니다. MSDN에서
다음의 인용은 다음과 같이
가 버전 5.0 이상이면, cbSize 멤버를 초기화합니다.
nid.cbSize = sizeof (NOTIFYICONDATA);
cbSize를이 값으로 설정하면 모든 버전 5.0 및 6.0의 향상된 기능을 사용할 수 있습니다. 이전 버전의 경우 6.0 이전 구조의 크기는 NOTIFYICONDATA_V2_SIZE 상수로 지정되고 5.0 이전 구조는 NOTIFYICONDATA_V1_SIZE 상수로 지정됩니다. 다음과 같이 cbSize 멤버를 초기화합니다. nid.cbSize = NOTIFYICONDATA_V2_SIZE;
이 값을 cbSize로 사용하면 응용 프로그램에서 버전 6.0의 향상된 기능이 없어도 이전 Shell32.dll 버전과 함께 NOTIFYICONDATA를 사용할 수 있습니다.
I 그것은 모호 약간 발견 '는 sizeof (NOTIFYICONDATA)'는 Win98 상이한 값 (Shell32.dll에서 버전 4.x를 사용), 윈도우 2000 (버전 5.0) 및 WINXP (버전 6.0)을 가지고 있기 때문이다. 어떻게하면 '5.0 및 6.0의 모든 기능 향상이 가능합니까?'
NOTIFYICONDATA_V1_SIZE 승 2K (2K를 포함하지 않는다)
NOTIFYICONDATA_V2_SIZE 승을위한 XP
입니다 : 그래서 나는 NOTIFYICONDATA_V1_SIZE의 정의 (아래 소스 코드), 내가 볼 찾았다그것은 완전히 differen의 (내가 맞다 있는지 확실하지 않습니다)
NOTIFYICONDATA_V3_SIZE 비스타에 대한
입니다 MSDN에서 무엇을 말하는가? Win2K는 없습니까?
저는 지금 당황하고 있습니다. Shell32.dll 버전에 따라 cbSize 멤버를 어떻게 설정해야합니까?
//= = = = = = = = 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
은 (코드가 웹 사이트에 잘 보이지 않는 것 같다,하지만, 모두 같은 ShellAPI.h에서)
올바르게 표시하려면 코드의 4 칸을 들여 쓰거나 전체 코드를 선택하고 Ctrl + K를 누르십시오. – Ismael