When the code was compiled using a new SDK, creating wxTaskBarIcon failed
under older Windows systems because of a too big NOTIFYICONDATA size specified
by the program.
Fix this by using the fixed NOTIFYICONDATA_V2_SIZE to get old version of the
struct which nevertheless contains everything we need and even fall back to
NOTIFYICONDATA_V1_SIZE for Win9x if needed.
Closes #11886.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63849
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- Allow to not create wxPaintDC in EVT_PAINT handler.
- Fix sending of wxEVT_COMMAND_LIST_COL_DRAGGING events in wxListCtrl.
- Allow putting the UAC symbol on buttons (Chris Spencer).
- Allow to not create wxPaintDC in EVT_PAINT handler.
- Fix sending of wxEVT_COMMAND_LIST_COL_DRAGGING events in wxListCtrl.
- Allow putting the UAC symbol on buttons (Chris Spencer).
+- Fix wxTaskBarIcon for older Windows systems (Daniel Wyatt).
#define NIF_INFO 0x00000010
#endif
#define NIF_INFO 0x00000010
#endif
+#ifndef NOTIFYICONDATA_V1_SIZE
+ #ifdef UNICODE
+ #define NOTIFYICONDATA_V1_SIZE 0x0098
+ #else
+ #define NOTIFYICONDATA_V1_SIZE 0x0058
+ #endif
+#endif
+
+#ifndef NOTIFYICONDATA_V2_SIZE
+ #ifdef UNICODE
+ #define NOTIFYICONDATA_V2_SIZE 0x03A8;
+ #else
+ #define NOTIFYICONDATA_V2_SIZE 0x01E8;
+ #endif
+#endif
// initialized on demand
static UINT gs_msgTaskbar = 0;
// initialized on demand
static UINT gs_msgTaskbar = 0;
NotifyIconData(WXHWND hwnd)
{
memset(this, 0, sizeof(NOTIFYICONDATA));
NotifyIconData(WXHWND hwnd)
{
memset(this, 0, sizeof(NOTIFYICONDATA));
- cbSize = sizeof(NOTIFYICONDATA);
+
+ // Do _not_ use sizeof(NOTIFYICONDATA) here, it may be too big if we're
+ // compiled with newer headers but running on an older system and while
+ // we could do complicated tests for the exact system version it's
+ // easier to just use an old size which should be supported everywhere
+ // from Windows 2000 up and which is all we need as we don't use any
+ // newer features so far. But if we're running under a really ancient
+ // system (Win9x), fall back to even smaller size -- then the balloon
+ // related features won't be available but the rest will still work.
+ cbSize = wxTheApp->GetShell32Version() >= 500
+ ? NOTIFYICONDATA_V2_SIZE
+ : NOTIFYICONDATA_V1_SIZE;
+
hWnd = (HWND) hwnd;
uCallbackMessage = gs_msgTaskbar;
uFlags = NIF_MESSAGE;
hWnd = (HWND) hwnd;
uCallbackMessage = gs_msgTaskbar;
uFlags = NIF_MESSAGE;
// the balloon disappearance
NotifyIconData notifyData(hwnd);
notifyData.uFlags = 0;
// the balloon disappearance
NotifyIconData notifyData(hwnd);
notifyData.uFlags = 0;
- notifyData.uVersion = 3 /* NOTIFYICON_VERSION for Windows XP */;
+ notifyData.uVersion = 3 /* NOTIFYICON_VERSION for Windows 2000/XP */;
if ( !wxShellNotifyIcon(NIM_SETVERSION, ¬ifyData) )
{
if ( !wxShellNotifyIcon(NIM_SETVERSION, ¬ifyData) )
{