您的位置:首页 > 运维架构 > Shell

win32创建应用程序的系统托盘图标

2014-02-14 13:56 489 查看
    前段时间工作需要,做了一个应用程序并且是要带有系统托盘图标的,虽然网上还是有很多的相关代码介绍,但是这里还是想写一下,做一个记录吧,简单介绍下过程以及API的调用步骤。

    我写的这个是基于一个模态对话框的:开始呢定义出我们要用的变量

    NOTIFYICONDATA nid;

    UINT WM_TASKBARCREATED = 0;

    1、首先在WM_INITDIALOG消息中创建出我们的系统托盘图标的反键菜单(如果你需要)

    if (pNid == NULL)

    {

        return;

    }

    pNid->cbSize = sizeof(NOTIFYICONDATA);

    pNid->hWnd = hWnd;

    pNid->uID = 0;

    pNid->uFlags = NIF_ICON | NIF_MESSAGE | NIF_INFO | NIF_TIP;

    pNid->uCallbackMessage = WM_USER;

    pNid->hIcon = LoadIcon(NULL, IDI_APPLICATION);

    wcscpy(pNid->szInfo, _T("Synchronous Time"));

    wcscpy(pNid->szTip, _T("Synchronous Time"));

    wcscpy(pNid->szInfoTitle,_T(""));

    Shell_NotifyIcon(NIM_ADD, pNid);

    hmenu=CreatePopupMenu();

    AppendMenu(hmenu, MF_STRING,IDR_SHOW, _T("Show"));

    AppendMenu(hmenu, MF_STRING,IDR_EXIT, _T("Exit"));

    SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) | WS_EX_TOOLWINDOW);

 

    2、处理default消息分支

    default:

        if (uMsg == WM_TASKBARCREATED)

            SendMessage(hWnd, WM_CREATE, wParam, lParam);

        break;

    3、此时呢在产生的WM_USER消息中我们可以加上对托盘图标反键菜单的鼠标点击处理

    if (lParam == WM_LBUTTONDOWN);//左键单击不作任何处理

            if (lParam == WM_LBUTTONDBLCLK)

            {

                PostMessage(hWnd, WM_MYSHOWWINDOW, wParam, lParam);//左键双击的处理

            }

            if (lParam == WM_RBUTTONDOWN)

            {

                ProShellIconMsg(hWnd, wParam, lParam, &nid);//右键单击的处理

            }

            break;

    4、左键双击的处理:

        case WM_MYSHOWWINDOW:

        ShowWindow(hWnd, SW_SHOW);

        UpdateWindow(hWnd);

        break;

    5、右键单击的处理:

    POINT pt;

    int xx;

    GetCursorPos(&pt);

    SetForegroundWindow(hWnd);

    xx = TrackPopupMenu(hmenu, TPM_RETURNCMD, pt.x, pt.y, NULL, hWnd, NULL);

    if (xx == IDR_SHOW)

    {

        PostMessage(hWnd, WM_MYSHOWWINDOW, wParam, lParam);

    }

    if (xx == IDR_EXIT)

    {

        Shell_NotifyIcon(NIM_DELETE, pNid);

    }

    6、此时呢在当我们点击对话框右上角的关闭按钮时ShowWindow(hWnd, SW_HIDE);隐藏我们的主窗口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  win32 应用程序 shell