龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

vc++应用程序最小化后在系统托盘显示小图标(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
可以在对话框初始化函数中添加下面代码 NOTIFYICONDATA nid; nid.cbSize = sizeof( NOTIFYICONDATA ); nid.hWnd = m_hWnd; // handle of window that will receive // messages from icon nid.uID

可以在对话框初始化函数中添加下面代码

     NOTIFYICONDATA nid;
    nid.cbSize = sizeof( NOTIFYICONDATA );
    nid.hWnd = m_hWnd; // handle of window that will receive
    // messages from icon
    nid.uID = IDR_MAINFRAME; // id for this icon
    nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
    // the next three parameters are valid
    nid.uCallbackMessage = WM_SYSTEMTRAY;
    // message that icon sends when clicked
    nid.hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME );
    // icon
    //strcpy( nid.szTip, "System Tray Tip" );
    wcscpy(nid.szTip, L"System Tray Tip");
    //StrCpyW(&nid.szTip,"System Tray Tip");
   
    // bubble help message for icon
    ::Shell_NotifyIcon( NIM_ADD,&nid );
 响应最大最小消息,可以通过WM_SYSCOMMAND

void CSystemTrayDlg::OnSysCommand(UINT nID, LPARAM lParam)
...{

    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    ...{
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else if(nID == SC_MAXIMIZE) //最大化
    ...{
        this->ShowWindow(SW_SHOWMAXIMIZED);
    }
    else if(nID == SC_MINIMIZE) //最小化,把他隐藏起来
    ...{
        this->ShowWindow(FALSE);
    }
    else
    ...{
        CDialog::OnSysCommand(nID, lParam);
    }
}
 在资源栏添加一个菜单资源,假如资源号为IDR_MENU
并且添加响应此菜单的函数

afx_msg void OnExit();
ON_COMMAND(ID_EXIT32774, OnExit)
void CSystemTrayDlg::OnExit()
...{
    CDialog::OnCancel();
}
因为在退出程序的时候需要把小图标删除掉,所以在添加如下代码:

void CSystemTrayDlg::OnDestroy()
...{
    NOTIFYICONDATA nid;
    nid.cbSize = sizeof( NOTIFYICONDATA );
    nid.hWnd = m_hWnd;
    nid.uID = IDR_MAINFRAME;
    nid.uFlags = 0;
    ::Shell_NotifyIcon( NIM_DELETE,&nid );
    CDialog::OnDestroy();

}

精彩图集

赞助商链接