通知領域のツールチップの表示について

もふったーのツールチップがWindows 2000で表示されないことに気付いたので、調査してみました。

    NOTIFYICONDATA ni;
    ZeroMemory(&ni, sizeof(NOTIFYICONDATA));
    ni.cbSize = sizeof(NOTIFYICONDATA);
    ni.hWnd=hWndMain;
    ni.uID = TRAY_ID;
    ni.uVersion = NOTIFYICON_VERSION_0;
    if((GetVersion()&0xf)>4){
      ni.uVersion = ((GetVersion()&0xf)>5)?
       NOTIFYICON_VERSION_4:NOTIFYICON_VERSION;
    }
    ni.uFlags = NIF_INFO;
    ni.uTimeout = INFOTIME*1000;
    ni.dwInfoFlags = mode;
    lstrcpyW(ni.szInfoTitle,tit);
    lstrcpyW(ni.szInfo,info);
    Shell_NotifyIcon(Trayon?NIM_MODIFY:NIM_ADD, &ni);

元々、こんな感じでプログラム組んであったのですが、

uVersion の

//95/98
#define NOTIFYICON_VERSION_0 0
//2000
#define NOTIFYICON_VERSION 3
//XP
#define NOTIFYICON_VERSION_4 4

以外にも

cbSize が間違ってると通知領域が正常に表示されないことが判明

//95/98
#define NOTIFYICONDATAW_V1_SIZE 512
// 2000
#define NOTIFYICONDATAW_V2_SIZE 936
// XP
#define NOTIFYICONDATAW_V3_SIZE 952
// Vista
#define NOTIFYICONDATAW_V4_SIZE 956

結構面倒ですね。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です