加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么Shell_NotifyIcon气球提示不起作用?

发布时间:2020-12-16 10:38:24 所属栏目:百科 来源:网络整理
导读:根据我所看到的一切,当我在应用程序窗口中单击鼠标左键时,以下C程序应该从托盘图标显示气球工具提示,但它不起作用.谁能告诉我我错过了什么? 这是在XP的Shell32.dll 6.0版本(使用DllGetVersion验证). 谢谢! #include "stdafx.h" #include "shellapi.h" LRES
根据我所看到的一切,当我在应用程序窗口中单击鼠标左键时,以下C程序应该从托盘图标显示气球工具提示,但它不起作用.谁能告诉我我错过了什么?

这是在XP的Shell32.dll 6.0版本(使用DllGetVersion验证).

谢谢!

#include "stdafx.h"
    #include "shellapi.h"

    LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);

    int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
    {
        MSG msg;

        WNDCLASS wc;
        memset(&wc,sizeof(wc));
        wc.lpfnWndProc = WndProc;
        wc.hInstance = hInstance;
        wc.hCursor = LoadCursor(NULL,IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wc.lpszClassName = "sysTrayTest";
        RegisterClass(&wc);

        HWND hWnd = CreateWindow("sysTrayTest","",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,500,NULL,hInstance,NULL);
        if (hWnd)
        {
            ShowWindow(hWnd,nCmdShow);
            while (GetMessage(&msg,0))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }

        return 0;
    }

    LRESULT CALLBACK WndProc(HWND hWnd,LPARAM lParam)
    {
        switch (message)
        {
            case WM_DESTROY:
            {
                NOTIFYICONDATA nid;
                memset(&nid,sizeof(NOTIFYICONDATA));
                nid.cbSize = sizeof(NOTIFYICONDATA);
                nid.hWnd = hWnd;
                nid.uID = 1;
                Shell_NotifyIcon(NIM_DELETE,&nid);

                PostQuitMessage(0);
            }
            break;

            case WM_CREATE:
            {
                NOTIFYICONDATA nid;
                memset(&nid,sizeof(NOTIFYICONDATA));
                nid.cbSize = sizeof(NOTIFYICONDATA);
                nid.hWnd = hWnd;
                nid.uID = 1;
                nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
                nid.uCallbackMessage = WM_USER + 200;
                nid.hIcon = LoadIcon(NULL,IDI_INFORMATION);
                lstrcpy (nid.szTip,"Test Tip");
                Shell_NotifyIcon(NIM_ADD,&nid);
            }
            break;

            case WM_LBUTTONDOWN:
            {
                NOTIFYICONDATA nid;
                memset(&nid,sizeof(NOTIFYICONDATA));
                nid.cbSize = sizeof(NOTIFYICONDATA);
                nid.hWnd = hWnd;
                nid.uID = 1;
                nid.uFlags = NIF_INFO;
                lstrcpy(nid.szInfo,"Test balloon tip");
                lstrcpy(nid.szInfoTitle,"Test Title");
                nid.dwInfoFlags = NIIF_INFO;
                nid.uTimeout = 15000;
                Shell_NotifyIcon(NIM_MODIFY,&nid);
            }
            break;

            default:
                return DefWindowProc(hWnd,message,wParam,lParam);
        }
        return 0;
    }

解决方法

呸,我明白了.出于某种原因我有标题…

sizeof(NOTIFYICONDATA)== 508

而…

NOTIFYICONDATA_V3_SIZE == 504
NOTIFYICONDATA_V2_SIZE == 488
NOTIFYICONDATA_V1_SIZE == 88

如果我指定V2或V3而不是sizeof(NOTIFYICONDATA),气球提示就会显示出来.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读