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

viimo 2009-07-07 05:48:05

出错信息:


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'”?

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

...全文
313 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
大空翼88 2011-10-03
  • 打赏
  • 举报
回复
[Quote=引用 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……
[/Quote]

更新sdk 版本 再包含进去 是可以的
banzi7 2010-05-03
  • 打赏
  • 举报
回复
看一下,谢谢
marrco2005 2009-07-10
  • 打赏
  • 举报
回复
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 的路径位于最前面.
WaistCoat17 2009-07-09
  • 打赏
  • 举报
回复
搜索你的工程里看哪里还定义了_WIN32_IE
viimo 2009-07-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dream238 的回复:]
引用 13 楼 viimo 的回复:
加上#undef _WIN32_IE 是何解呢?


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

取消掉也没用。实在无语。
ArcRain 2009-07-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 viimo 的回复:]
加上#undef _WIN32_IE 是何解呢?
[/Quote]
就是把原先已经存在的宏_WIN32_IE取消定义,后面再重新定义一次.
viimo 2009-07-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 WaistCoat17 的回复:]
stdafx.h里面定义
#ifdef _WIN32_IE
#undef _WIN32_IE
#define _WIN32_IE 0x0500 //为 IE 5.0 及更新版本改变为适当的值。
#endif
[/Quote]



加上#undef _WIN32_IE 是何解呢?
WaistCoat17 2009-07-07
  • 打赏
  • 举报
回复
stdafx.h里面定义
#ifdef _WIN32_IE
#undef _WIN32_IE
#define _WIN32_IE 0x0500 //为 IE 5.0 及更新版本改变为适当的值。
#endif
viimo 2009-07-07
  • 打赏
  • 举报
回复
有没有人可以帮我呢?
viimo 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 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
[/Quote]

十分感谢Ryanwen 你的回复!

我的系统是XP-sp3
stdafx.h里面定义
#ifndef _WIN32_IE // 允许使用 IE 4.0 或更高版本的特定功能。
#define _WIN32_IE 0x0500 //为 IE 5.0 及更新版本改变为适当的值。
#endif
Ryanwen 2009-07-07
  • 打赏
  • 举报
回复
看看你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 2009-07-07
  • 打赏
  • 举报
回复
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
viimo 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Ryanwen 的回复:]
_WIN32_IE = 0x0500 也就是Internet Explorer 5.0,5.0a,5.0b 你的IE版本应该高于这个版本才有szInfoTitle的定义
[/Quote]

版本我的是6.0,但问题还是存在。
viimo 2009-07-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 NineheadedBird 的回复:]
看看szInfoTitle你用的地方吧
[/Quote]


_tcscpy(nid.szInfoTitle,"提示信息:");
_tcscpy(nid.szInfo,"内容……");
nid.uTimeout=1000;
nid.uVersion=NOTIFYICON_VERSION;
Shell_NotifyIcon(NIM_MODIFY,&nid);
viimo 2009-07-07
  • 打赏
  • 举报
回复

我的现在已经是这个了:

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


Ryanwen 2009-07-07
  • 打赏
  • 举报
回复
_WIN32_IE = 0x0500 也就是Internet Explorer 5.0,5.0a,5.0b 你的IE版本应该高于这个版本才有szInfoTitle的定义
NineheadedBird 2009-07-07
  • 打赏
  • 举报
回复
看看szInfoTitle你用的地方吧
greatws 2009-07-07
  • 打赏
  • 举报
回复
我这里是这样的,#if (_WIN32_IE >= 0x0500)才有下面的,你有定义这个宏吗?


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;


Ryanwen 2009-07-07
  • 打赏
  • 举报
回复
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;

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧