Visual c++ 在系统托盘中显示引出序号工具提示

Visual c++ 在系统托盘中显示引出序号工具提示,visual-c++,winapi,Visual C++,Winapi,这是我的密码 设置trayicon 然后放气球 但是,无法显示引出序号工具提示 请教我。您应该检查shell32.dll版本,并将cbSize设置为(如备注部分所述): sizeof(notifyiconda)如果版本>=6.0.6 notifyiconda\u V3\u SIZE如果版本为6.0(WinXP) notifyiconda\u V2\u SIZE如果版本为5.0(Win2000) notifyiconda\u V1\u SIZE如果版本为,则应检查shell32.dll版

这是我的密码

设置trayicon

然后放气球

但是,无法显示引出序号工具提示


请教我。

您应该检查shell32.dll版本,并将cbSize设置为(如备注部分所述):

  • sizeof(notifyiconda)
    如果版本>=6.0.6
  • notifyiconda\u V3\u SIZE
    如果版本为6.0(WinXP)
  • notifyiconda\u V2\u SIZE
    如果版本为5.0(Win2000)

  • notifyiconda\u V1\u SIZE
    如果版本为,则应检查shell32.dll版本,并将cbSize设置为(如备注部分所述):

    • sizeof(notifyiconda)
      如果版本>=6.0.6
    • notifyiconda\u V3\u SIZE
      如果版本为6.0(WinXP)
    • notifyiconda\u V2\u SIZE
      如果版本为5.0(Win2000)

    • notifyiconda\u V1\u SIZE
      如果版本是我在官方文档中发现检测windows版本的代码不太正确。 这应该更好地发挥作用:

      试试这个尺寸(字面意思):

      然后,当您想要设置图标时,可以测试正确的windows版本。由于某些原因,在官方文档中,他们只检查了6.1,而它应该是6.0.6+所有其他windows版本

      if( CheckWindowsVersion(6, 0, 6))
          data.cbSize = sizeof(NOTIFYICONDATA);
      else if( CheckWindowsVersion(6, 0, 0))
          data.cbSize = NOTIFYICONDATA_V3_SIZE;
      else if( CheckWindowsVersion(5, 0, 0))
          data.cbSize = NOTIFYICONDATA_V2_SIZE;
      else
          data.cbSize = NOTIFYICONDATA_V1_SIZE;
      

      我还没有完全测试版本号部分,但我认为这一定很接近。我发现官方文档中用于检测windows版本的代码不太正确。 这应该更好地发挥作用:

      试试这个尺寸(字面意思):

      然后,当您想要设置图标时,可以测试正确的windows版本。由于某些原因,在官方文档中,他们只检查了6.1,而它应该是6.0.6+所有其他windows版本

      if( CheckWindowsVersion(6, 0, 6))
          data.cbSize = sizeof(NOTIFYICONDATA);
      else if( CheckWindowsVersion(6, 0, 0))
          data.cbSize = NOTIFYICONDATA_V3_SIZE;
      else if( CheckWindowsVersion(5, 0, 0))
          data.cbSize = NOTIFYICONDATA_V2_SIZE;
      else
          data.cbSize = NOTIFYICONDATA_V1_SIZE;
      

      我还没有完全测试版本BUILDNUMBER部分,但我想这一定很接近了。

      如何通过编程了解版本?这样我就可以用If-else来包装它了。@Neel:linked docs说how-use from shell32。那么如何通过编程了解版本呢?这样我就可以用If-else来包装它了。@Neel:linked docs say how-use from shell32。
      BOOL CheckWindowsVersion(DWORD dwMajor, DWORD dwMinor, DWORD dwBuild)
      {
          // Initialize the OSVERSIONINFOEX structure.
          OSVERSIONINFOEX osvi;
          ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
          osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
          osvi.dwMajorVersion = dwMajor;
          osvi.dwMinorVersion = dwMinor;
          osvi.dwBuildNumber = dwBuild;
      
          // Initialize the condition mask.
          DWORDLONG dwlConditionMask = 0;
          VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
          VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
          VER_SET_CONDITION(dwlConditionMask, VER_BUILDNUMBER, VER_GREATER_EQUAL);
      
      
          // Perform the test.
          return VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER, dwlConditionMask);
      }
      
      if( CheckWindowsVersion(6, 0, 6))
          data.cbSize = sizeof(NOTIFYICONDATA);
      else if( CheckWindowsVersion(6, 0, 0))
          data.cbSize = NOTIFYICONDATA_V3_SIZE;
      else if( CheckWindowsVersion(5, 0, 0))
          data.cbSize = NOTIFYICONDATA_V2_SIZE;
      else
          data.cbSize = NOTIFYICONDATA_V1_SIZE;