zoukankan      html  css  js  c++  java
  • 最小化托盘的实现方法

    在书上看到的,认为实用,记下了。

    首先,最小化托盘的基本原理是,将应用程序的主窗口隐藏,然后在托盘中绘制应用程序的图标。然后再为托盘图标加入一些事件处理。

    核心函数是Shell_NotifyIcon()函数,负责向系统传递消息,加入、改动或删除托盘区的图标。原型:

    WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(

    DWORD dwMessage,

    PNOTIFYCONDATA pnid

    );

    当中dwMessage标示功能,有NIM_ADD/NIM_DELETE/NIM_MODIFY。

    pnid是程序最小化到托盘的图标信息结构体:

    typedef struct _NOTIFYCONDATA {

    DOWRD cbSize; //结构的长度

    HWND hWnd;

    UINT uID; //图标ID

    UINT uFlags; //标志着其它哪些成员数据的有效性?

    UINT uCallbackMessage; //当用户单击托盘区图标时会向窗体发送消息

    HICON hIcon; //图标句柄

    char szTip[64]; //鼠标移动到托盘图标上时显示的文字

    } NOTIFYICONDATA, *PNOTIFYICONDATA;


    相关代码:

    ...

    NOTIFYICONDATA nid;

    nid.cbSize = (DWORD) sizeof (NOTIFYICONDATA);

    nid.hWnd = this->m_hWnd;

    nid.uID = IDR_MAINFRAME;

    nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP; //这句我不理解?

    nid.uCallbackMessage = WM_CALL;

    nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

    strcpy(nid.szTip,"MyApp");

    Shell_NotifyIcon(NIM_ADD,&nid);

    ShowWindow(SW_HIDE); //隐藏主窗体

    ...

    接着自己定义消息WM_CALL,方法有一篇文章有讲到。

    这里要注意规定了回调消息wParam接收图标ID。lParam接收鼠标的行为。

    另外,当程序所有关闭时,也应该删除掉托盘。代码差点儿相同,不反复了。


  • 相关阅读:
    ARC081F Flip and Rectangles
    LCA
    Tarjan
    2020牛客暑期多校六
    状压DP
    操作系统
    JAVA期末复习
    D. Yet Another Yet Another Task (区间最值)
    构造
    Codeforces Round #641 (Div. 2)
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6855873.html
Copyright © 2011-2022 走看看