在vc中将程序图标最小化到托盘中

来源:互联网 发布:墨西哥人 知乎 编辑:程序博客网 时间:2024/05/16 05:35

1.**.h中定义消息名字,添加消息函数定义

#define WM_ICONNOTIFY  WM_USER + 500 //图标响应消息(lParam)

afx_msg LRESULT OnNotifyIcon(WPARAM wParam, LPARAM lParam);

2.**.cpp添加消息映射

    ON_MESSAGE(WM_ICONNOTIFY,CtestDlgDlg::OnNotifyIcon)

3.编写最小化到托盘的函数

void CtestDlgDlg::OnBnClickedButton1()

{

    // TODO: 在此添加控件通知处理程序代码

    NOTIFYICONDATA nid;

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

    nid.hWnd = m_hWnd;

    nid.uID = IDD_TESTDLG_DIALOG;

    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

    nid.uCallbackMessage = WM_ICONNOTIFY;     //自定义的消息名称

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

                                                                            //    IDR_MAINFRAME  是在托盘显示的图标

    strcpy(nid.szTip,"程序名称");      //信息提示条为计划任务提醒

    Shell_NotifyIcon(NIM_ADD, &nid);   //在托盘区添加图标

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

}

4.编写托盘的消息响应函数

LRESULT CtestDlgDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)

{

    POINT point;  

    CMenu menu;  

    GetCursorPos(&point);

 

    //如果在托盘图标上双击左键

    if ((wParam == IDD_TESTDLG_DIALOG) && (lParam == WM_LBUTTONDBLCLK))  

    {  

        ShowWindow(SW_SHOW); //显示窗体 

    }

     //如果在托盘图标上单击右键

    if ((wParam == IDD_TESTDLG_DIALOG) && (lParam == WM_RBUTTONDOWN))  

    {        

        menu.LoadMenu(IDR_MENU1);             //加载系统主菜单

        SetForegroundWindow();                //将程序置于桌面顶部 

 menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x, point.y, this); //在点击图标处弹出系统菜单的第一项                  /

    }  

    return 0;

}

5.编写删除托盘图标的函数

void CtestDlgDlg::OnDestroy()

{

    CDialog::OnDestroy();

    // TODO: 在此处添加消息处理程序代码

    NOTIFYICONDATA nc;

    nc.cbSize = sizeof(NOTIFYICONDATA);

    nc.hWnd = m_hWnd;

    nc.uID = IDD_TESTDLG_DIALOG;

    Shell_NotifyIcon(NIM_DELETE, &nc); //删除系统托盘图标 

}

原创粉丝点击