Hol*_*olt 4 c++ winapi system-tray
我目前正在开发 Win32 应用程序,我希望在系统任务栏中有一个图标。我用来Shell_NotifyIcon显示图标,它工作得很好,但图标经常消失,没有解释......
事实上,当我在构建代码后第一次在 Visual Studio 2013 中运行代码时,或者当我从另一个.exe目录中运行应用程序时,就会出现该错误(我没有出现任何错误,例如missing dll应用程序正在运行,但图标不再存在...)。
我用来创建图标的代码:
// At the beginning of the file
static NOTIFYICONDATA m_nid ;
// After
m_nid.cbSize = sizeof (m_nid);
m_nid.hWnd = hwnd;
m_nid.uVersion = NOTIFYICON_VERSION_4 ;
static const GUID myGUID =
{0x5CA81ADA, 0xA481, 0x4BA8, {0x8B, 0x70, 0x80, 0x3f, 0x48, 0x67, 0xA1, 0x68}};
m_nid.guidItem = myGUID;
m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_GUID | NIF_MESSAGE ;
m_nid.uCallbackMessage = WM_SYSTEM_TRAY;
StringCchCopy (m_nid.szTip, ARRAYSIZE (m_nid.szTip), NotificationManager::APPLICATION_NAME.c_str ());
m_nid.hIcon = (HICON) LoadImage (NULL, L"icon_v1.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
ShowWindow (m_nid.hWnd, SW_HIDE);
Shell_NotifyIcon (NIM_ADD, &m_nid);
Shell_NotifyIcon (NIM_SETVERSION, &m_nid);
Run Code Online (Sandbox Code Playgroud)
编辑:我认为这是一个问题,GUID因为在Release模式下图标没有显示,但由于我更改了GUID它的工作...但当我在 Visual Studio 之外运行程序时它仍然不起作用...
系统托盘图标消失的原因有多种可能。
与该图标关联的 HWND 已被破坏。
在现代 Windows 版本中,该图标已被应用程序控制之外的用户设置隐藏起来。
Windows 资源管理器崩溃并重新启动,但您没有处理TaskbarCreated重新添加图标的消息。
编辑:另一种可能性是您只是将错误的输入传递给它Shell_NotifyIcon(),并且它因您忽略的错误而失败。
| 归档时间: |
|
| 查看次数: |
3915 次 |
| 最近记录: |