BOOL CProShowApp::InitInstance()
{
//鼠标移动到任务栏的托盘图标上提示乱码!!!!
//关闭程序,托盘图标消失!!!!!
//鼠标点击托盘,是什么消息处理下,可以弹出菜单呢?
NOTIFYICONDATA m_niData;
m_niData.cbSize=sizeof(m_niData);
m_niData.hWnd=this->m_pMainWnd->m_hWnd;
m_niData.hIcon=LoadIcon(IDR_MAINFRAME);
m_niData.uID=2907;
m_niData.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; Shell_NotifyIcon(NIM_ADD,&m_niData);
return TRUE;
}
=====>>因为你没加tip//关闭程序,托盘图标消失!!!!!
====>你到底想要什么样子?//鼠标点击托盘,是什么消息处理下,可以弹出菜单呢?
=====》可以设置一个通知消息, NOTIFYICONDATA结构有个成员uCallbackMessage给它赋值一个消息ID
消息响应函数里判断lParam是否是 switch (lParam)
{
case WM_LBUTTONDBLCLK:
{
//鼠标双击托盘图标
}
看看这个把!
CHAR tipchar[10] = "fuck here";
m_niData.szTip = tipchar; error C2440: “=”: 无法从“CHAR [10]”转换为“CHAR [128]”
===>
strcpy(m_niData.szTip,tipchar);
...
m_nData.uCallbackMessage = WM_TaskBarNotifyMenu; //这里用的是WM_TaskBarNotifyMenu这个自定义消息
...
//然后写接受消息的回调函数即可,详情可参考下面的代码
afx_msg LRESULT CWinDlg::OnTaskbarnotifymenu(WPARAM wParam, LPARAM lParam)
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
{
if(wParam!=IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
{ LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);//得到鼠标位置
CMenu menu;
menu.CreatePopupMenu();//声明一个弹出式菜单
//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已
//隐藏),将程序结束。
menu.AppendMenu(MF_STRING,WM_DESTROY,_T("退出"));
//确定弹出式菜单的位置
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
//资源回收
HMENU hmenu=menu.Detach();
menu.DestroyMenu();
delete lpoint;
}
break;
case WM_LBUTTONDBLCLK://双击左键的处理
{
this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿
}
break;
}
return 0;
}
lstrcpyn(m_TrayData.szTip, _T("TIP文字"), sizeof(m_TrayData.szTip));2、你关闭程序,进程都退出了,肯定关闭了,除非你隐藏,你看到别人的其实都是隐藏主窗口。3、托盘结构构造时有个自定义消息,响应那个消息的鼠标点击,弹出你的快捷菜单,菜单和其他弹出式菜单一样,自己做。
ON_MESSAGE(WM_MESSAGE_STOCK, &CProShowApp::OnMessageStock)
1>.\ProShow.cpp(28) : error C2440: “static_cast”: 无法从“LRESULT (__thiscall CProShowApp::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
#define WM_MESSAGE_STOCK (WM_USER + 5)
afx_msg LRESULT OnMessageStock(WPARAM wParam,LPARAM lParam);
ON_MESSAGE(WM_MESSAGE_STOCK, &CProShowApp::OnMessageStock)1>.\ProShow.cpp(28) : error C2440: “static_cast”: 无法从“LRESULT (__thiscall CProShowApp::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”