托盘制作心得

 

制作的主要涉及到的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;

}

 

 

 

你可能感兴趣的:(数据结构,shell,struct,api,delete,byte)