mfc 托盘弹出气泡

最近喜欢到处倒腾乱七八糟的东西,还把些功能搞到一个四不像的程序中

看到一些东西就想把它搞到那个程序中

用了某个程序中最小化到托盘后弹出一个小气泡提示

网上找了一下果然有实现的方法,vc6就可以

参考http://blog.csdn.net/zltpc007/archive/2008/01/05/2026574.aspx上面的并未完全成功

 

将ShellAPI.h对应内容更改之后

 

void CMainFrame::OnScrcut() { // TODO: Add your command handler code here if(IDOK == MessageBox("程序将最小化到系统托盘!","截图提示",MB_OKCANCEL)) { HICON m_hPlate; m_hPlate = LoadIcon(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_PLATE)); //NOTIFYICONDATA nd; nd.cbSize = sizeof (NOTIFYICONDATA); nd.hWnd = m_hWnd; nd.uID = IDI_PLATE; nd.uFlags = NIF_INFO|NIF_ICON|NIF_MESSAGE|NIF_TIP; nd.uCallbackMessage = WM_NOTIFYICON; nd.hIcon = m_hPlate; strcpy(nd.szTip, "我的程序"); strcpy(nd.szInfoTitle, "提示" );//气泡标题 strcpy(nd.szInfo, "系统已缩小为托盘,您可以双击打开" );//气泡内容 Shell_NotifyIcon(NIM_ADD, &nd); ShowWindow(SW_HIDE);//隐藏窗口 ::Sleep(100); CWindowDC wdc(FromHandle(::GetDesktopWindow())); wdc.SetBkMode(TRANSPARENT); wdc.SetTextColor(RGB(255,0,0)); CFont font; font.CreatePointFont(200,"华文行楷",NULL); wdc.SelectObject(&font); wdc.TextOut(1000,700,"鼠标拖动选中截图",strlen("鼠标拖动选中截图")); } } LONG CMainFrame::OnNotifyIcon(WPARAM wParam, LPARAM lParam) //wParam是响应消息的图标ID,lParam中是Windows消息 { CMenu menu; switch(lParam) { case WM_RBUTTONDOWN: //在托盘图标上单击鼠标右键 { if (menu.LoadMenu(IDR_PLATE)) { CMenu* pPopup = menu.GetSubMenu(0); CPoint point; /*if (IsWindowVisible()) //如果窗口没有隐藏 { pPopup->EnableMenuItem(IDC_SHOW,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); } else pPopup->EnableMenuItem(IDC_HIDE,MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);*/ GetCursorPos(&point); //获得鼠标位置 SetForegroundWindow(); //显示窗口 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,this); } } break; case WM_LBUTTONDBLCLK: //鼠标双击时主窗口出现 if(AfxGetApp()->m_pMainWnd->IsWindowVisible()) //判断窗口当前状态 { AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE); //隐藏窗口 } else { AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW); //显示窗口 Shell_NotifyIcon(NIM_DELETE, &nd); } break; } return 0; }

 

测试成功:

 

 

你可能感兴趣的:(windows,shell,command,null,delete,mfc)