hur.cn - 华软网

 热门搜索

托盘图标的NOTIFYICONDATAA问题!!!!

  作者:未知    来源:网络    更新时间:2009/7/7

出错信息:

  
     G:\MyC++Pro\ZTEAutoLogin\ZTEAutoLoginDlg.cpp(487) : error C2039: 'szInfoTitle' : is not a member of '_NOTIFYICONDATAA'   
        f:\program files\microsoft visual studio\vc98\include\shellapi.h(510) : see declaration of '_NOTIFYICONDATAA'




跟上去查看NOTIFYICONDATAA 的结构信息为:

typedef struct _NOTIFYICONDATAA {
    DWORD cbSize;
    HWND hWnd;
    UINT uID;
    UINT uFlags;
    UINT uCallbackMessage;
    HICON hIcon;
    TCHAR szTip[64];
    DWORD dwState;
    DWORD dwStateMask;
    TCHAR szInfo[256];
    union {
        UINT uTimeout;
        UINT uVersion;
    };
    TCHAR szInfoTitle[64];
    DWORD dwInfoFlags;
    GUID guidItem;
    HICON hBalloonIcon;
}NOTIFYICONDATA, *PNOTIFYICONDATA;




明明结构里面有szInfoTitle,怎么编译的时候就是出现“not a member of '_NOTIFYICONDATAA'”?

哪位大哥指点一下小弟~先谢了~~


---华软 网友回答---
typedef struct _NOTIFYICONDATA { 
    DWORD cbSize; 
    HWND hWnd; 
    UINT uID; 
    UINT uFlags; 
    UINT uCallbackMessage; 
    HICON hIcon; 
    #if (_WIN32_IE < 0x0500)
        TCHAR szTip[64];
    #else
        TCHAR szTip[128];
    #endif
    #if (_WIN32_IE >= 0x0500)  //IE版本>=0x0500才有这个定义,看看你的IE版本
        DWORD dwState; 
        DWORD dwStateMask; 
        TCHAR szInfo[256]; 
        union {
            UINT  uTimeout; 
            UINT  uVersion; 
        } DUMMYUNIONNAME;
        TCHAR szInfoTitle[64]; 
        DWORD dwInfoFlags; 
    #endif
    #if (_WIN32_IE >= 0x600)
        GUID guidItem;
    #endif
} NOTIFYICONDATA, *PNOTIFYICONDATA; 

---华软网友回复---
我这里是这样的,#if (_WIN32_IE >= 0x0500)才有下面的,你有定义这个宏吗?

C++">
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;



---华软网友回复---
看看szInfoTitle你用的地方吧
---华软网友回复---
_WIN32_IE = 0x0500  也就是Internet Explorer 5.0,5.0a,5.0b  你的IE版本应该高于这个版本才有szInfoTitle的定义
---华软网友回复---
C++">
我的现在已经是这个了:

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;



全部替换了NOTIFYICONDATAA结构。


回复Ryanwen说的IE版本,我的是版本:6.0.2900.5512.xpsp_sp3.qfe.09206-1316



---华软网友回复---
引用 3 楼 NineheadedBird 的回复:
看看szInfoTitle你用的地方吧



    _tcscpy(nid.szInfoTitle,"提示信息:");
    _tcscpy(nid.szInfo,"内容……");
    nid.uTimeout=1000;
    nid.uVersion=NOTIFYICON_VERSION; 
    Shell_NotifyIcon(NIM_MODIFY,&nid);

---华软网友回复---
引用 4 楼 Ryanwen 的回复:
_WIN32_IE = 0x0500  也就是Internet Explorer 5.0,5.0a,5.0b  你的IE版本应该高于这个版本才有szInfoTitle的定义


版本我的是6.0,但问题还是存在。
---华软网友回复---
http://topic.csdn.net/t/20061116/13/5162690.html
http://wupei.j2megame.org/blog.php/myblog/vc/2007/07/26/vc6.0-bleb-niif-info
---华软网友回复---
看看你stdafx.h中_WIN32_IE的定义是多少,我的2003是0x0400所以我也不能直接用szInfoTitle,必须先更改这个定义到更高版本
#ifndef _WIN32_IE // Allow use of features specific to IE 4.0 or later.
#define _WIN32_IE 0x0400 // Change this to the appropriate value to target IE 5.0 or later.
#endif
---华软网友回复---
引用 9 楼 Ryanwen 的回复:
看看你stdafx.h中_WIN32_IE的定义是多少,我的2003是0x0400所以我也不能直接用szInfoTitle,必须先更改这个定义到更高版本 
#ifndef _WIN32_IE // Allow use of features specific to IE 4.0 or later. 
#define _WIN32_IE 0x0400 // Change this to the appropriate value to target IE 5.0 or later. 
#endif


十分感谢Ryanwen 你的回复!

我的系统是XP-sp3
stdafx.h里面定义
#ifndef _WIN32_IE // 允许使用 IE 4.0 或更高版本的特定功能。
#define _WIN32_IE 0x0500 //为 IE 5.0 及更新版本改变为适当的值。
#endif
---华软网友回复---
有没有人可以帮我呢?
---华软网友回复---
stdafx.h里面定义
#ifdef _WIN32_IE
#undef _WIN32_IE
#define _WIN32_IE 0x0500 //为 IE 5.0 及更新版本改变为适当的值。
#endif
---华软网友回复---
引用 12 楼 WaistCoat17 的回复:
stdafx.h里面定义 
#ifdef _WIN32_IE 
#undef _WIN32_IE 
#define _WIN32_IE 0x0500 //为 IE 5.0 及更新版本改变为适当的值。 
#endif




加上#undef _WIN32_IE 是何解呢?
---华软网友回复---
引用 13 楼 viimo 的回复:
加上#undef _WIN32_IE 是何解呢?

就是把原先已经存在的宏_WIN32_IE取消定义,后面再重新定义一次.
---华软网友回复---
引用 14 楼 dream238 的回复:
引用 13 楼 viimo 的回复:
加上#undef _WIN32_IE 是何解呢? 


就是把原先已经存在的宏_WIN32_IE取消定义,后面再重新定义一次.


取消掉也没用。实在无语。
---华软网友回复---
搜索你的工程里看哪里还定义了_WIN32_IE
---华软网友回复---
    G:\MyC++Pro\ZTEAutoLogin\ZTEAutoLoginDlg.cpp(487) : error C2039: 'szInfoTitle' : is not a member of '_NOTIFYICONDATAA'  
        f:\program files\microsoft visual studio\vc98\include\shellapi.h(510) : see declaration of '_NOTIFYICONDATAA' 


问题出在这,f:\program files\microsoft visual studio\vc98\include\shellapi.h(510) 这个文件是旧的SDK文件,旧的SDK文件中是没有 szInfoTitle 定义的。

你要升级你的 vc6 的 SDK,最后一个用于 vc6 的 SDK 补丁是 2003 版的。
如果你已经打了 SDK 的补丁,
设置一下 vc6 的 include 和 lib 路径, 确保 2003 SDk 的路径位于最前面.
---华软网友回复---
看一下,谢谢
---华软网友回复---
引用 17 楼 marrco2005 的回复:
G:\MyC++Pro\ZTEAutoLogin\ZTEAutoLoginDlg.cpp(487) : error C2039: 'szInfoTitle' : is not a member of '_NOTIFYICONDATAA'
f:\program files\microsoft visual studio\vc98\include\shellapi.h(510) : see decl……


更新sdk 版本 再包含进去 是可以的      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。