IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Что-то с _WIN32_IE (http://www.imho.ws/showthread.php?t=93480)

VENOMOUS SNAKE 01.10.2005 15:47

Что-то с _WIN32_IE
 
Установил Microsoft Visual Studio .NET. Круто. ОС у меня WinXP. Тоже круто. Начал писать прогу, в ней активно используется System Tray. Так вот есть такая структура NOTIFYICONDATA называется. Начиная с пятой версии Internet Explorer она немного видоизменяется, предоставляя новые возможности. Вот кусок кода из SHELLAPI.H
Код:

typedef struct _NOTIFYICONDATAA {
        DWORD cbSize;
        HWND hWnd;
        UINT uID;
        UINT uFlags;
        UINT uCallbackMessage;
        HICON hIcon;
#if (_WIN32_IE < 0x0500)
        CHAR  szTip[64];
#else
        CHAR  szTip[128];
#endif
#if (_WIN32_IE >= 0x0500)
        DWORD dwState;
        DWORD dwStateMask;
        CHAR  szInfo[256];
        union {
            UINT  uTimeout;
            UINT  uVersion;
        } DUMMYUNIONNAME;
        CHAR  szInfoTitle[64];
        DWORD dwInfoFlags;
#endif
#if (_WIN32_IE >= 0x600)
        GUID guidItem;
#endif
} NOTIFYICONDATAA, *PNOTIFYICONDATAA;
typedef struct _NOTIFYICONDATAW {
        DWORD cbSize;
        HWND hWnd;
        UINT uID;
        UINT uFlags;
        UINT uCallbackMessage;
        HICON hIcon;
#if (_WIN32_IE < 0x0500)
        WCHAR  szTip[64];
#else
        WCHAR  szTip[128];
#endif
#if (_WIN32_IE >= 0x0500)
        DWORD dwState;
        DWORD dwStateMask;
        WCHAR  szInfo[256];
        union {
            UINT  uTimeout;
            UINT  uVersion;
        } DUMMYUNIONNAME;
        WCHAR  szInfoTitle[64];
        DWORD dwInfoFlags;
#endif
#if (_WIN32_IE >= 0x600)
        GUID guidItem;
#endif
} NOTIFYICONDATAW, *PNOTIFYICONDATAW;
#ifdef UNICODE
typedef NOTIFYICONDATAW NOTIFYICONDATA;
typedef PNOTIFYICONDATAW PNOTIFYICONDATA;
#else
typedef NOTIFYICONDATAA NOTIFYICONDATA;
typedef PNOTIFYICONDATAA PNOTIFYICONDATA;
#endif // UNICODE

Как видно новые поля в структуру добавляются по условию (_WIN32_IE >= 0x500). Загвоздка в том, что у меня этого не происходит, несмотря на то, что стоит WinXP и IE6.
Я вставил в начало своего кода следующий текст:
Код:

#if _WIN32_IE < 0x500
#error WINDOWS MUST DIE
#endif

Теперь компилятор често признаётся, что WINDOWS не самая лучшая система. Если кто знает, в чём проблема, помогите, пожалуйста.

alexey_ma 01.10.2005 22:30

Посмотри внимательно файл stdafx.h в своем проекте. Там можно выставить нужные #define для версии Win и IE.
Ну например так
Код:

#ifndef WINVER                               
#define WINVER 0x0501 //(Windows XP and Windows .NET Server)")       
#endif
#ifndef _WIN32_IE                       
#define _WIN32_IE 0x0500       
#endif


grinkevitch 04.10.2005 01:27

Да, поля в структуре никто не добавляет и не убирает. Это ты сам должен сказать компилятору, под какую систему ты строишь приложение. и если ты явно ничего не сказал, то будет строиться максимально совместимое, то есть с минимумом доступных функций


Часовой пояс GMT +4, время: 22:16.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.