1.首先,要使程序的主窗口不可见,并且不在任务栏上出现任务按钮,要做到这两点,需分别设置主边框窗口的风格和扩展风格:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style =WS_POPUP;//使主窗口不可见
cs.dwExStyle |=WS_EX_TOOLWINDOW;//不显示任务按钮
return CFrameWnd::PreCreateWindow(cs);
}
2.其次,利用系统函数Shell_NotifyIcon将一个图标显示在任务栏的通告区中。该函数的原型为:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage, 
PNOTIFYICONDATA pnid 
); 
3.int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{

NOTIFYICONDATA tnd;
tnd.cbSize=sizeof(NOTIFYICONDATA);
tnd.hWnd=this->m_hWnd;
tnd.uID=IDR_MAINFRAME;
tnd.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnd.uCallbackMessage=WM_LIBEN;
tnd.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(tnd.szTip,"提示信息");
Shell_NotifyIcon(NIM_ADD,&tnd);

}
在调用该函数之前,需要确定其参数的取值,其中之一为一个具有NOTIFYICONDATA类型的结构。
4.void CMainFrame::OnLiben(WPARAM wParam,LPARAM lParam)
{
UINT uID;//发出该消息的图标的ID
UINT uMouseMsg;//鼠标动作
POINT pt;
uID=(UINT) wParam;
uMouseMsg=(UINT) lParam;
if(uMouseMsg==WM_RBUTTONDOWN)//如果是单击右键
{
switch(uID)
{
case IDR_MAINFRAME://如果是我们的图标
GetCursorPos(&pt);//取得鼠标位置
…//执行相应操作
break;

default:

}
5.afx_msg void OnLiben(WPARAM wParam,LPARAM lParam);
6.ON_MESSAGE(WM_LIBEN,OnLiben)
好了试试看。

解决方案 »

  1.   

    你需要对任务栏右下脚操作。即托盘操作!并且拦截系统消息最小化和关闭操作!
    给你段大致代码:
    void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam) 
    {
              switch(nID)
    {
    case SC_MINIMIZE:
    {
       HICON hicon=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDR_MAINFRAME)); 
               HWND  hwnd=this->GetSafeHwnd(); 
    //当最小化时,添加图标到任务栏右下脚
       m_Tray.TaskBarAddIcon(hwnd,IDR_NOTIFYICON,hicon,"好好学习!"); 
       //this->ShowWindow(SW_HIDE);
       break;
    } case SC_CLOSE:
    {
    HWND  hwnd=this->GetSafeHwnd(); 
    //关闭时,去掉图标
    m_Tray.TaskBarDeleteIcon(hwnd,IDR_NOTIFYICON);
    break;
    }
    default :
    CFrameWnd::OnSysCommand(nID, lParam);
    }
    }
    //其中m_Tray是封装托盘区域操作类的一个实例。
    你需要了解NOTIFYICONDATA结构和Shell_NotifyIcon()的用法。你搜索一下MSDN或者CSDN论坛。应该可以找到你的答案
      

  2.   

    呵呵,我有一个托盘类,很好用的,你的email?