托盘制作心得

 

制作的主要涉及到的API只有Shell_NotifyIcon

虽然API只有一个,但是这个API的参数的数据结构可是看的让人很烦的。

NOTIFYICONDATA

typedef struct _NOTIFYICONDATA {

    DWORD cbSize;   //结构大小 byte计算

    HWND hWnd; //创建托盘的程序窗口句柄,也就是应用程序窗口句柄

    UINT uID; //图标ID

    UINT uFlags;

    UINT uCallbackMessage; //自定义回调消息,当你的鼠标位于托盘上的时候,鼠标和键盘有任何消息的时候都会触发这个消息/ 其中lParam指定消息ID,

    HICON hIcon;

    TCHAR szTip[64];   //当鼠标放在托盘上的时候显示的文字

    DWORD dwState;

    DWORD dwStateMask;

    TCHAR szInfo[256];//以一个向tip窗口形式显示的文字

    union {

        UINT uTimeout;

        UINT uVersion;

    };

    TCHAR szInfoTitle[64];   //TIP窗口标题

    DWORD dwInfoFlags;

    GUID guidItem;

} NOTIFYICONDATA, *PNOTIFYICONDATA;

 

 

定义一个成员变量用于存放NOTIFYICONDATA结构,然后在OnInitDialog里面创建托盘,在Onclose里面删除托盘图标,添加自定义消息来处理鼠标在托盘上的单击消息。在消息中ShowWindow(SW_SHOW)

代码如下:

OnInitDialog

m_nid.cbSize = sizeof(m_nid);

   m_nid.hWnd = this->m_hWnd;

   m_nid.hIcon = AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDI_ICON1));

   //wcscpy_s(m_nid.szInfoTitle,20,TEXT("WarKey"));

   m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_INFO | NIF_TIP;

   wcscpy(m_nid.szTip,TEXT("jasonM WarKey"));

   wcscpy_s(m_nid.szInfoTitle,5,TEXT("提示"));

   m_nid.uCallbackMessage = WM_MYSHOWWINDOW;

   m_nid.uTimeout = 10;

   wcscpy_s(m_nid.szInfo,100,TEXT("JasonM制作"));

   m_nid.dwInfoFlags = NIIF_INFO;

   ::Shell_NotifyIcon(NIM_ADD, &m_nid);

 

OnClose

void CMyWarKeyDlg::OnClose()

{

   // TODO: 在此添加消息处理程序代码和/或调用默认值

   Shell_NotifyIcon(NIM_DELETE,&m_nid);

   CDialog::OnClose();

}

处理自定义消息:

afx_msg LRESULT  CMyWarKeyDlg::OnShowMyWindow(WPARAM wParam, LPARAM lParam)

{

   if(lParam == WM_LBUTTONDOWN)

   {

      ShowWindow(SW_SHOW);

   }

   return 1;

}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值